<div dir="ltr">Hi.<div><br></div><div>I was writing to ask for help, but found the solution myself,<br><div><br></div><div>Google widevine (DRM system) ( <a href="https://storage.googleapis.com/wvdocs/Widevine_DRM_Encryption_API.pdf">https://storage.googleapis.com/wvdocs/Widevine_DRM_Encryption_API.pdf</a> ) requires signing JSON request.<br></div><div><br></div><div><br></div></div><div>Have spent half a day on "bad argument" from crypto library, but found that I was not making padding for crypto.</div><div><br></div><div><br></div><div>The C++ code has:</div><div><br></div><div>Crypt(base::SHA1HashString(message), signature)<br></div><div><br></div><div>where Crypt has following:</div><div><br></div><div><div>    AES_cbc_encrypt(plaintext, ciphertext, cbc_size, aes_key(),</div><div>                    internal_iv_.data(), AES_ENCRYPT);</div></div><div><br></div><div><br></div><div><a href="https://github.com/google/shaka-packager/blob/master/packager/media/base/aes_encryptor.cc#L61">https://github.com/google/shaka-packager/blob/master/packager/media/base/aes_encryptor.cc#L61</a><br></div><div><br></div><div><br></div><div>I could make it work with such code:</div><div><br></div><div>Pkcs = fun(A,N) -> Pad = N - (size(A) rem N), <<A/binary, (binary:copy(<<Pad>>, Pad))/binary>> end,<br></div><div><span style="font-variant-ligatures:no-common-ligatures;font-family:Menlo;font-size:13px">base64:encode(crypto:block_encrypt(aes_cbc256,AESKey,IV,Pkcs(JsonRequest,16))).</span><br></div><div>


<br></div><div><br></div><div>The trick is to add standard padding that makes content proper size.</div><div><br></div><div><br></div></div>