• eroman@chromium.org's avatar
    [webcrypto] Implement structured clone of keys (blink-side). · 8cafd48f
    eroman@chromium.org authored
    The format looks like this:
    
      subtag:byte            // The type of key
      keySpecificProperties  // Block of key specific algorithm info
      usages:uint32          // Bitfield of usages + extractability
      keyDataLength:uint32   // Block of data controlled by embedder
      keyData:byte[keyDataLength]
    
    subtag influences how keySpecificProperties is interpreted:
    
    [If subtag=AesKeyTag]
      keyLengthBytes:uint32  // 16, 24, or 32
      algorithmId:uint32
    
    [If subtag=HmacKeyTag]
      keyLengthBytes:uint32
      hashId:uint32
    
    [If subtag=RsaKeyTag]
      algorithmId:uint32
      type:uint32            // One of {PublicKeyType, PrivateKeyType}
      modulusLengthBits:uint32
      publicExponentLength:uint32
      publicExponent:byte[publicExponentLength]
    
    [If subtag=RsaHashedKeyTag]
      <Same as for RsaKeyTag>
      hashId:uint32
    
    Note that uint32 is encoded as a variable length number. In practice it ends up being a single byte for most of the uses above.
    
    In this design, blink is responsible for serializing all of the key's attributes except for the actual key data which is left to the embedder.
    
    The included tests rely on the chromium side of structured clone landing:
      https://codereview.chromium.org/196513002/
    
    The tests cover serialization of hmac, aes and rsa public keys. I haven't added tests for serialization of rsa private keys yet, since that part is not done on the chromium side.
    
    BUG=245025
    
    Review URL: https://codereview.chromium.org/195543002
    
    git-svn-id: svn://svn.chromium.org/blink/trunk@169633 bbb929c8-8fbe-4397-9dbb-9b2b20218538
    8cafd48f
WebCryptoKeyAlgorithm.h 4.11 KB