Index: patches/nss-encrypt-with-sym-key.patch |
=================================================================== |
--- patches/nss-encrypt-with-sym-key.patch (revision 0) |
+++ patches/nss-encrypt-with-sym-key.patch (revision 0) |
@@ -0,0 +1,120 @@ |
+Index: mozilla/security/nss/lib/pk11wrap/pk11obj.c |
+=================================================================== |
+--- mozilla/security/nss/lib/pk11wrap/pk11obj.c (revision 182578) |
++++ mozilla/security/nss/lib/pk11wrap/pk11obj.c (working copy) |
+@@ -822,6 +822,93 @@ |
+ return SECSuccess; |
+ } |
+ |
++SECStatus |
++PK11_EncryptWithSymKey(PK11SymKey *symKey, |
++ CK_MECHANISM_TYPE mechanism, SECItem *param, |
++ unsigned char *out, unsigned int *outLen, |
++ unsigned int maxLen, |
++ const unsigned char *data, unsigned dataLen) |
++{ |
++ PK11SlotInfo *slot = symKey->slot; |
++ CK_MECHANISM mech = {0, NULL, 0 }; |
++ CK_ULONG len = maxLen; |
++ PRBool owner = PR_TRUE; |
++ CK_SESSION_HANDLE session; |
++ PRBool haslock = PR_FALSE; |
++ CK_RV crv; |
++ |
++ mech.mechanism = mechanism; |
++ if (param) { |
++ mech.pParameter = param->data; |
++ mech.ulParameterLen = param->len; |
++ } |
++ |
++ session = pk11_GetNewSession(slot, &owner); |
++ haslock = (!owner || !slot->isThreadSafe); |
++ if (haslock) PK11_EnterSlotMonitor(slot); |
++ crv = PK11_GETTAB(slot)->C_EncryptInit(session, &mech, symKey->objectID); |
++ if (crv != CKR_OK) { |
++ if (haslock) PK11_ExitSlotMonitor(slot); |
++ pk11_CloseSession(slot,session,owner); |
++ PORT_SetError( PK11_MapError(crv) ); |
++ return SECFailure; |
++ } |
++ crv = PK11_GETTAB(slot)->C_Encrypt(session, (unsigned char *)data, |
++ dataLen, out, &len); |
++ if (haslock) PK11_ExitSlotMonitor(slot); |
++ pk11_CloseSession(slot,session,owner); |
++ *outLen = len; |
++ if (crv != CKR_OK) { |
++ PORT_SetError( PK11_MapError(crv) ); |
++ return SECFailure; |
++ } |
++ return SECSuccess; |
++} |
++ |
++SECStatus |
++PK11_DecryptWithSymKey(PK11SymKey *symKey, |
++ CK_MECHANISM_TYPE mechanism, SECItem *param, |
++ unsigned char *out, unsigned int *outLen, |
++ unsigned int maxLen, |
++ const unsigned char *enc, unsigned encLen) |
++{ |
++ PK11SlotInfo *slot = symKey->slot; |
++ CK_MECHANISM mech = {0, NULL, 0 }; |
++ CK_ULONG len = maxLen; |
++ PRBool owner = PR_TRUE; |
++ CK_SESSION_HANDLE session; |
++ PRBool haslock = PR_FALSE; |
++ CK_RV crv; |
++ |
++ mech.mechanism = mechanism; |
++ if (param) { |
++ mech.pParameter = param->data; |
++ mech.ulParameterLen = param->len; |
++ } |
++ |
++ session = pk11_GetNewSession(slot, &owner); |
++ haslock = (!owner || !slot->isThreadSafe); |
++ if (haslock) PK11_EnterSlotMonitor(slot); |
++ crv = PK11_GETTAB(slot)->C_DecryptInit(session, &mech, symKey->objectID); |
++ if (crv != CKR_OK) { |
++ if (haslock) PK11_ExitSlotMonitor(slot); |
++ pk11_CloseSession(slot, session, owner); |
++ PORT_SetError( PK11_MapError(crv) ); |
++ return SECFailure; |
++ } |
++ |
++ crv = PK11_GETTAB(slot)->C_Decrypt(session, (unsigned char *)enc, encLen, |
++ out, &len); |
++ if (haslock) PK11_ExitSlotMonitor(slot); |
++ pk11_CloseSession(slot, session, owner); |
++ *outLen = len; |
++ if (crv != CKR_OK) { |
++ PORT_SetError( PK11_MapError(crv) ); |
++ return SECFailure; |
++ } |
++ return SECSuccess; |
++} |
++ |
+ /* |
+ * Now SSL 2.0 uses raw RSA stuff. These next to functions *must* use |
+ * RSA keys, or they'll fail. We do the checks up front. If anyone comes |
+Index: mozilla/security/nss/lib/pk11wrap/pk11pub.h |
+=================================================================== |
+--- mozilla/security/nss/lib/pk11wrap/pk11pub.h (revision 182578) |
++++ mozilla/security/nss/lib/pk11wrap/pk11pub.h (working copy) |
+@@ -508,6 +508,17 @@ |
+ void *wincx); |
+ int PK11_GetPrivateModulusLen(SECKEYPrivateKey *key); |
+ |
++SECStatus PK11_EncryptWithSymKey(PK11SymKey *symKey, |
++ CK_MECHANISM_TYPE mechanism, SECItem *param, |
++ unsigned char *out, unsigned int *outLen, |
++ unsigned int maxLen, |
++ const unsigned char *data, unsigned dataLen); |
++SECStatus PK11_DecryptWithSymKey(PK11SymKey *symkey, |
++ CK_MECHANISM_TYPE mechanism, SECItem *param, |
++ unsigned char *out, unsigned int *outLen, |
++ unsigned int maxLen, |
++ const unsigned char *enc, unsigned encLen); |
++ |
+ /* note: despite the name, this function takes a private key. */ |
+ SECStatus PK11_PubDecryptRaw(SECKEYPrivateKey *key, unsigned char *data, |
+ unsigned *outLen, unsigned int maxLen, unsigned char *enc, unsigned encLen); |
Property changes on: patches\nss-encrypt-with-sym-key.patch |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |