• ap@apple.com's avatar
    Support exporting symmetric keys as JWK · ca827605
    ap@apple.com authored
    https://bugs.webkit.org/show_bug.cgi?id=124442
    
    Reviewed by Sam Weinig.
    
    Source/JavaScriptCore: 
    
    * runtime/JSONObject.h: Export JSONStringify.
    
    Source/WebCore: 
    
    Error handling is not consistent yet - some errors cause exceptions, and others
    result in rejected promises. This part of spec is incomplete, so I basically did
    what was most straightforward in each case.
    
    * bindings/js/JSCryptoKeySerializationJWK.h: 
    * bindings/js/JSCryptoKeySerializationJWK.cpp:
    (WebCore::JSCryptoKeySerializationJWK::reconcileUsages): Updated a comment with a better link.
    (WebCore::JSCryptoKeySerializationJWK::buildJSONForOctetSequence): A helper to building JWK.
    (WebCore::JSCryptoKeySerializationJWK::addToJSON): Ditto.
    (WebCore::JSCryptoKeySerializationJWK::addBoolToJSON): Ditto.
    (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON): Ditto. The code for
    mapping is my best guess, this all needs to be specified.
    (WebCore::JSCryptoKeySerializationJWK::addJWKUseToJSON): A helper to building JWK.
    (WebCore::JSCryptoKeySerializationJWK::serialize): Build a JSON string for the key.
    
    * bindings/js/JSSubtleCryptoCustom.cpp:
    (WebCore::JSSubtleCrypto::importKey): Updated a comment.
    (WebCore::JSSubtleCrypto::exportKey): Use CryptoKeySerialization (also for raw keys,
    for consistency).
    
    * crypto/CryptoKey.h:
    (WebCore::CryptoKey::algorithmIdentifier):
    (WebCore::CryptoKey::usagesBitmap):
    Exposed data needed for building JWK (it used to be only exposed in a form suitable
    for DOM accessors).
    
    * crypto/keys/CryptoKeyHMAC.h: Ditto, added an accessor for JWK.
    
    * crypto/keys/CryptoKeySerializationRaw.cpp: (WebCore::CryptoKeySerializationRaw::serialize):
    * crypto/keys/CryptoKeySerializationRaw.h:
    Moved from JSSubtleCryptoCustom.cpp for consistency.
    
    Source/WTF: 
    
    Base64URL encoding doesn't use '=' padding, and doesn't need any other options.
    Added this mode for encode, and removed policy arguments from exposed functions.
    
    * wtf/text/Base64.cpp:
    (WTF::base64EncodeInternal):
    (WTF::base64URLEncode):
    (WTF::base64URLDecode):
    * wtf/text/Base64.h:
    (WTF::base64URLEncode):
    
    LayoutTests: 
    
    * crypto/subtle/aes-export-key-expected.txt:
    * crypto/subtle/aes-export-key.html:
    * crypto/subtle/hmac-export-key-expected.txt:
    * crypto/subtle/hmac-export-key.html:
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@159377 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    ca827605
JSONObject.h 2.58 KB