diff options
Diffstat (limited to 'data/extensions/https-everywhere@eff.org/chrome/content/code/NSS.js')
-rw-r--r-- | data/extensions/https-everywhere@eff.org/chrome/content/code/NSS.js | 491 |
1 files changed, 491 insertions, 0 deletions
diff --git a/data/extensions/https-everywhere@eff.org/chrome/content/code/NSS.js b/data/extensions/https-everywhere@eff.org/chrome/content/code/NSS.js new file mode 100644 index 0000000..97a7e78 --- /dev/null +++ b/data/extensions/https-everywhere@eff.org/chrome/content/code/NSS.js @@ -0,0 +1,491 @@ +// Copyright (c) 2011 Moxie Marlinspike <moxie@thoughtcrime.org> +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 3 of the +// License, or (at your option) any later version. + +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA + + +/** + * This class manages the ctypes bridge to the NSS (crypto) libraries + * distributed with Mozilla. + * + **/ + +function NSS() { + +} + +NSS.initialize = function(nssPath) { + var sharedLib; + + try { + sharedLib = ctypes.open(nssPath); + } catch (e) { + dump("Failed to find nss3 in installed directory, checking system paths.\n"); + sharedLib = ctypes.open(ctypes.libraryName("nss3")); + } + + NSS.types = new Object(); + + NSS.types.CERTDistNames = ctypes.StructType("CERTDistNames"); + + NSS.types.SECItem = ctypes.StructType("SECItem", + [{'type' : ctypes.int}, + {'data' : ctypes.unsigned_char.ptr}, + {'len' : ctypes.uint32_t}]); + + NSS.types.PLArenaPool = ctypes.StructType("PLArenaPool"); + + NSS.types.CERTCertificateList = ctypes.StructType("CERTCertificateList", + [{'certs' : NSS.types.SECItem.ptr}, + {'len' : ctypes.int}, + {'arena' : NSS.types.PLArenaPool.ptr}]), + + NSS.types.CERTAVA = ctypes.StructType("CERTAVA", + [{'type' : NSS.types.SECItem}, + {'value' : NSS.types.SECItem}]); + + NSS.types.CERTRDN = ctypes.StructType("CERTRDN", + [{'avas' : NSS.types.CERTAVA.ptr.ptr}]); + + NSS.types.SECAlgorithmID = ctypes.StructType("SECAlgorithmID", + [{'algorithm' : NSS.types.SECItem}, + {'parameters' : NSS.types.SECItem}]); + + NSS.types.CERTSignedData = ctypes.StructType("CERTSignedData", + [{'data' : NSS.types.SECItem}, + {'signatureAlgorithm' : NSS.types.SECAlgorithmID}, + {'signature' : NSS.types.SECItem}]); + + NSS.types.CERTOKDomainName = ctypes.StructType("CERTOKDomainName"); + + NSS.types.NSSCertificateStr = ctypes.StructType("NSSCertificateStr"); + + NSS.types.CERTAuthKeyID = ctypes.StructType("CERTAuthKeyID"); + + NSS.types.CERTName = ctypes.StructType("CERTName", + [{'arena' : ctypes.voidptr_t}, + {'rdns' : NSS.types.CERTRDN.ptr.ptr}]); + + NSS.types.CERTValidity = ctypes.StructType("CERTValidity", + [{'arena' : ctypes.voidptr_t}, + {'notBefore' : NSS.types.SECItem}, + {'notAfter' : NSS.types.SECItem}]); + + NSS.types.CERTCertExtension = ctypes.StructType("CERTCertExtension", + [{'id' : NSS.types.SECItem}, + {'critical' : NSS.types.SECItem}, + {'value' : NSS.types.SECItem}]); + + NSS.types.CERTCertDBHandle = ctypes.StructType("CERTCertDBHandle"); + + NSS.types.PK11SlotInfo = ctypes.StructType("PK11SlotInfo"); + + NSS.types.PK11SlotListElement = ctypes.StructType("PK11SlotListElement", + [{'next' : ctypes.StructType("PK11SlotListElement").ptr}, + {'prev' : ctypes.StructType("PK11SlotListElement").ptr}, + {'slot' : NSS.types.PK11SlotInfo.ptr}, + {'refCount' : ctypes.int}]), + + NSS.types.PK11SlotList = ctypes.StructType("PK11SlotList", + [{'head' : NSS.types.PK11SlotListElement.ptr}, + {'tail' : NSS.types.PK11SlotListElement.ptr}, + {'lock' : ctypes.StructType("PZLock").ptr}]), + + NSS.types.SECKEYPrivateKey = ctypes.StructType("SECKEYPrivateKey", + [{'arena' : NSS.types.PLArenaPool.ptr}, + {'keyType' : ctypes.int}, + {'pkcs11Slot' : NSS.types.PK11SlotInfo.ptr}, + {'pkcs11ID' : ctypes.unsigned_long}, + {'pkcs11IsTemp' : ctypes.int}, + {'wincx' : ctypes.voidptr_t}, + {'staticflags' : ctypes.int32_t}]); + + NSS.types.SECKEYPublicKey = ctypes.StructType("SECKEYPublicKey"); + + NSS.types.CERTSubjectPublicKeyInfo = ctypes.StructType("CERTSubjectPublicKeyInfo", + [{'arena' : NSS.types.PLArenaPool.ptr}, + {'algorithm' : NSS.types.SECAlgorithmID}, + {'subjectPublicKey' : NSS.types.SECItem}]); + + NSS.types.CERTCertificateRequest = ctypes.StructType("CERTCertificateRequest"); + + NSS.types.SEC_ASN1Template = ctypes.StructType("SEC_ASN1Template", + [{'kind' : ctypes.unsigned_long}, + {'offset' : ctypes.unsigned_long}, + {'sub' : ctypes.voidptr_t}, + {'size' : ctypes.unsigned_int}]); + + NSS.types.PK11RSAGenParams = ctypes.StructType("PK11RSAGenParams", + [{'keySizeInBits' : ctypes.int}, + {'pe' : ctypes.unsigned_long}]); + + NSS.types.CERTCertTrust = ctypes.StructType("CERTCertTrust", + [{'sslFlags' : ctypes.uint32_t}, + {'emailFlags' : ctypes.uint32_t}, + {'objectSigningFlags' : ctypes.uint32_t}]); + + NSS.types.CERTSubjectList = ctypes.StructType("CERTSubjectList"); + + NSS.types.CERTGeneralName = ctypes.StructType("CERTGeneralName"); + + NSS.types.CERTCertificate = ctypes.StructType("CERTCertificate", + [{'arena' : NSS.types.PLArenaPool.ptr}, + {'subjectName' : ctypes.char.ptr}, + {'issuerName' : ctypes.char.ptr}, + {'signatureWrap' : NSS.types.CERTSignedData}, + {'derCert' : NSS.types.SECItem}, + {'derIssuer' : NSS.types.SECItem}, + {'derSubject' : NSS.types.SECItem}, + {'derPublicKey' : NSS.types.SECItem}, + {'certKey' : NSS.types.SECItem}, + {'version' : NSS.types.SECItem}, + {'serialNumber' : NSS.types.SECItem}, + {'signature' : NSS.types.SECAlgorithmID}, + {'issuer' : NSS.types.CERTName}, + {'validity' : NSS.types.CERTValidity}, + {'subject' : NSS.types.CERTName}, + {'subjectPublicKeyInfo' : NSS.types.CERTSubjectPublicKeyInfo}, + {'issuerID' : NSS.types.SECItem}, + {'subjectID' : NSS.types.SECItem}, + {'extensions' : NSS.types.CERTCertExtension.ptr.ptr}, + {'emailAddr' : ctypes.char.ptr}, + {'dbhandle' : NSS.types.CERTCertDBHandle.ptr}, + {'subjectKeyID' : NSS.types.SECItem}, + {'keyIDGenerated' : ctypes.int}, + {'keyUsage' : ctypes.unsigned_int}, + {'rawKeyUsage' : ctypes.unsigned_int}, + {'keyUsagePresent' : ctypes.int}, + {'nsCertType' : ctypes.uint32_t}, + {'keepSession' : ctypes.int}, + {'timeOK' : ctypes.int}, + {'domainOK' : NSS.types.CERTOKDomainName.ptr}, + {'isperm' : ctypes.int}, + {'istemp' : ctypes.int}, + {'nickname' : ctypes.char.ptr}, + {'dbnickname' : ctypes.char.ptr}, + {'nssCertificate' : NSS.types.NSSCertificateStr.ptr}, + {'trust' : NSS.types.CERTCertTrust.ptr}, + {'referenceCount' : ctypes.int}, + {'subjectList' : NSS.types.CERTSubjectList.ptr}, + {'authKeyID' : NSS.types.CERTAuthKeyID.ptr}, + {'isRoot' : ctypes.int}, + {'options' : ctypes.voidptr_t}, + {'series' : ctypes.int}, + {'slot' : NSS.types.PK11SlotInfo.ptr}, + {'pkcs11ID' : ctypes.unsigned_long}, + {'ownSlot' : ctypes.int}]); + + NSS.types.CERTBasicConstraints = ctypes.StructType("CERTBasicConstraints", + [{'isCA': ctypes.int}, + {'pathLenConstraint' : ctypes.int}]); + + + NSS.lib = { + SEC_OID_MD5 : 3, + SEC_OID_SHA1 : 4, + SEC_OID_X509_KEY_USAGE : 81, + SEC_OID_NS_CERT_EXT_COMMENT : 75, + CKM_RSA_PKCS_KEY_PAIR_GEN : 0, + buffer : ctypes.ArrayType(ctypes.char), + ubuffer : ctypes.ArrayType(ctypes.unsigned_char), + + // CERT_CertificateTemplate : sharedLib.declare("CERT_CertificateTemplate", + // NSS.types.SEC_ASN1Template), + + NSS_Get_CERT_CertificateTemplate : sharedLib.declare("NSS_Get_CERT_CertificateTemplate", + ctypes.default_abi, + NSS.types.SEC_ASN1Template.ptr), + + PK11_HashBuf : sharedLib.declare("PK11_HashBuf", + ctypes.default_abi, + ctypes.int, + ctypes.int, + ctypes.unsigned_char.ptr, + ctypes.unsigned_char.ptr, + ctypes.int32_t), + + CERT_GetDefaultCertDB : sharedLib.declare("CERT_GetDefaultCertDB", + ctypes.default_abi, + NSS.types.CERTCertDBHandle.ptr), + + CERT_ChangeCertTrust : sharedLib.declare("CERT_ChangeCertTrust", + ctypes.default_abi, + ctypes.int32_t, + NSS.types.CERTCertDBHandle.ptr, + NSS.types.CERTCertificate.ptr, + NSS.types.CERTCertTrust.ptr), + + CERT_FindCertByNickname : sharedLib.declare("CERT_FindCertByNickname", + ctypes.default_abi, + NSS.types.CERTCertificate.ptr, + NSS.types.CERTCertDBHandle.ptr, + ctypes.char.ptr), + + CERT_FindCertByDERCert : sharedLib.declare("CERT_FindCertByDERCert", + ctypes.default_abi, + NSS.types.CERTCertificate.ptr, + NSS.types.CERTCertDBHandle.ptr, + NSS.types.SECItem.ptr), + + CERT_VerifyCertNow : sharedLib.declare("CERT_VerifyCertNow", + ctypes.default_abi, + ctypes.int, + NSS.types.CERTCertDBHandle.ptr, + NSS.types.CERTCertificate.ptr, + ctypes.int, + ctypes.int, + ctypes.voidptr_t), + + CERT_CertChainFromCert : sharedLib.declare("CERT_CertChainFromCert", + ctypes.default_abi, + NSS.types.CERTCertificateList.ptr, + NSS.types.CERTCertificate.ptr, + ctypes.int, + ctypes.int), + + PK11_FindKeyByAnyCert : sharedLib.declare("PK11_FindKeyByAnyCert", + ctypes.default_abi, + NSS.types.SECKEYPrivateKey.ptr, + NSS.types.CERTCertificate.ptr, + ctypes.voidptr_t), + + PK11_GetInternalKeySlot : sharedLib.declare("PK11_GetInternalKeySlot", + ctypes.default_abi, + NSS.types.PK11SlotInfo.ptr), + + PK11_GetAllSlotsForCert : sharedLib.declare("PK11_GetAllSlotsForCert", + ctypes.default_abi, + NSS.types.PK11SlotList.ptr, + NSS.types.CERTCertificate.ptr, + ctypes.voidptr_t), + + PK11_GetTokenName : sharedLib.declare("PK11_GetTokenName", + ctypes.default_abi, + ctypes.char.ptr, + NSS.types.PK11SlotInfo.ptr), + + PK11_GenerateKeyPair : sharedLib.declare("PK11_GenerateKeyPair", + ctypes.default_abi, + NSS.types.SECKEYPrivateKey.ptr, + NSS.types.PK11SlotInfo.ptr, + ctypes.int, + NSS.types.PK11RSAGenParams.ptr, + NSS.types.SECKEYPublicKey.ptr.ptr, + ctypes.int, + ctypes.int, + ctypes.voidptr_t), + + PK11_SetPrivateKeyNickname : sharedLib.declare("PK11_SetPrivateKeyNickname", + ctypes.default_abi, + ctypes.int, + NSS.types.SECKEYPrivateKey.ptr, + ctypes.char.ptr), + + SEC_ASN1EncodeItem : sharedLib.declare("SEC_ASN1EncodeItem", + ctypes.default_abi, + NSS.types.SECItem.ptr, + NSS.types.PLArenaPool.ptr, + NSS.types.SECItem.ptr, + ctypes.voidptr_t, + NSS.types.SEC_ASN1Template.ptr), + + SEC_DerSignData : sharedLib.declare("SEC_DerSignData", + ctypes.default_abi, + ctypes.int, + NSS.types.PLArenaPool.ptr, + NSS.types.SECItem.ptr, + ctypes.unsigned_char.ptr, + ctypes.int, + NSS.types.SECKEYPrivateKey.ptr, + ctypes.int), + + SEC_GetSignatureAlgorithmOidTag : sharedLib.declare("SEC_GetSignatureAlgorithmOidTag", + ctypes.default_abi, + ctypes.int, + ctypes.int, + ctypes.int), + + SECOID_SetAlgorithmID : sharedLib.declare("SECOID_SetAlgorithmID", + ctypes.default_abi, + ctypes.int, + NSS.types.PLArenaPool.ptr, + NSS.types.SECAlgorithmID.ptr, + ctypes.int, + NSS.types.SECItem.ptr), + + + CERT_Hexify : sharedLib.declare("CERT_Hexify", + ctypes.default_abi, + ctypes.char.ptr, + NSS.types.SECItem.ptr, + ctypes.int), + + CERT_AsciiToName : sharedLib.declare("CERT_AsciiToName", + ctypes.default_abi, + NSS.types.CERTName.ptr, + ctypes.char.ptr), + + SECKEY_CreateSubjectPublicKeyInfo : sharedLib.declare("SECKEY_CreateSubjectPublicKeyInfo", + ctypes.default_abi, + NSS.types.CERTSubjectPublicKeyInfo.ptr, + NSS.types.SECKEYPublicKey.ptr), + + CERT_CreateCertificateRequest : sharedLib.declare("CERT_CreateCertificateRequest", + ctypes.default_abi, + NSS.types.CERTCertificateRequest.ptr, + NSS.types.CERTName.ptr, + NSS.types.CERTSubjectPublicKeyInfo.ptr, + NSS.types.SECItem.ptr.ptr), + + CERT_CreateCertificate : sharedLib.declare("CERT_CreateCertificate", + ctypes.default_abi, + NSS.types.CERTCertificate.ptr, + ctypes.uint32_t, + NSS.types.CERTName.ptr, + NSS.types.CERTValidity.ptr, + NSS.types.CERTCertificateRequest.ptr), + + CERT_DestroyCertificate : sharedLib.declare("CERT_DestroyCertificate", + ctypes.default_abi, + ctypes.int, + NSS.types.CERTCertificate.ptr), + + CERT_DestroyCertificateList : sharedLib.declare("CERT_DestroyCertificateList", + ctypes.default_abi, + ctypes.int, + NSS.types.CERTCertificateList.ptr), + + CERT_NewTempCertificate : sharedLib.declare("CERT_NewTempCertificate", + ctypes.default_abi, + NSS.types.CERTCertificate.ptr, + NSS.types.CERTCertDBHandle.ptr, + NSS.types.SECItem.ptr, + ctypes.char.ptr, + ctypes.int, + ctypes.int), + + CERT_CreateValidity : sharedLib.declare("CERT_CreateValidity", + ctypes.default_abi, + NSS.types.CERTValidity.ptr, + ctypes.int64_t, + ctypes.int64_t), + + CERT_CertListFromCert : sharedLib.declare("CERT_CertListFromCert", + ctypes.default_abi, + NSS.types.CERTCertificateList.ptr, + NSS.types.CERTCertificate.ptr), + + CERT_StartCertExtensions : sharedLib.declare("CERT_StartCertExtensions", + ctypes.default_abi, + ctypes.voidptr_t, + NSS.types.CERTCertificate.ptr), + + CERT_AddExtension : sharedLib.declare("CERT_AddExtension", + ctypes.default_abi, + ctypes.int, + ctypes.voidptr_t, + ctypes.int, + NSS.types.SECItem.ptr, + ctypes.int, + ctypes.int), + + + CERT_EncodeBasicConstraintValue : sharedLib.declare("CERT_EncodeBasicConstraintValue", + ctypes.default_abi, + ctypes.int, + NSS.types.PLArenaPool.ptr, + NSS.types.CERTBasicConstraints.ptr, + NSS.types.SECItem.ptr), + + CERT_EncodeAndAddBitStrExtension : sharedLib.declare("CERT_EncodeAndAddBitStrExtension", + ctypes.default_abi, + ctypes.int, + ctypes.voidptr_t, + ctypes.int, + NSS.types.SECItem.ptr, + ctypes.int), + + CERT_EncodeAltNameExtension : sharedLib.declare("CERT_EncodeAltNameExtension", + ctypes.default_abi, + ctypes.int, + NSS.types.PLArenaPool.ptr, + NSS.types.CERTGeneralName.ptr, + NSS.types.SECItem.ptr), + + CERT_FinishExtensions : sharedLib.declare("CERT_FinishExtensions", + ctypes.default_abi, + ctypes.int, + ctypes.voidptr_t), + + CERT_ImportCerts : sharedLib.declare("CERT_ImportCerts", + ctypes.default_abi, + ctypes.int, + NSS.types.CERTCertDBHandle.ptr, + ctypes.int, + ctypes.int, + NSS.types.SECItem.ptr.ptr, + NSS.types.CERTCertificate.ptr.ptr.ptr, + ctypes.int, + ctypes.int, + ctypes.char.ptr), + + PORT_NewArena : sharedLib.declare("PORT_NewArena", + ctypes.default_abi, + NSS.types.PLArenaPool.ptr, + ctypes.uint32_t), + + PORT_ArenaZAlloc : sharedLib.declare("PORT_ArenaZAlloc", + ctypes.default_abi, + ctypes.voidptr_t, + NSS.types.PLArenaPool.ptr, + ctypes.int), + + PORT_FreeArena : sharedLib.declare("PORT_FreeArena", + ctypes.default_abi, + ctypes.void_t, + NSS.types.PLArenaPool.ptr, + ctypes.int), + + CERT_GetCommonName : sharedLib.declare("CERT_GetCommonName", + ctypes.default_abi, + ctypes.char.ptr, + NSS.types.CERTName.ptr), + + CERT_GetOrgUnitName : sharedLib.declare("CERT_GetOrgUnitName", + ctypes.default_abi, + ctypes.char.ptr, + NSS.types.CERTName.ptr), + + CERT_GetCertificateNames : sharedLib.declare("CERT_GetCertificateNames", + ctypes.default_abi, + NSS.types.CERTGeneralName.ptr, + NSS.types.CERTCertificate.ptr, + NSS.types.PLArenaPool.ptr), + + CERT_DecodeDERCertificate : sharedLib.declare("__CERT_DecodeDERCertificate", + ctypes.default_abi, + NSS.types.CERTCertificate.ptr, + NSS.types.SECItem.ptr, + ctypes.int, + ctypes.char.ptr), + + CERT_FindCertExtension : sharedLib.declare("CERT_FindCertExtension", + ctypes.default_abi, + ctypes.int, + NSS.types.CERTCertificate.ptr, + ctypes.int, + NSS.types.SECItem.ptr), + }; + +}; |