Initial import of python NSS binding code
git-svn-id: svn://10.0.0.236/trunk@257393 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
153
mozilla/security/python/nss/src/NSPRerrs.h
Normal file
153
mozilla/security/python/nss/src/NSPRerrs.h
Normal file
@@ -0,0 +1,153 @@
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is the Netscape security libraries.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1994-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
/* General NSPR 2.0 errors */
|
||||
/* Caller must #include "prerror.h" */
|
||||
|
||||
ER2( PR_OUT_OF_MEMORY_ERROR, "Memory allocation attempt failed." )
|
||||
ER2( PR_BAD_DESCRIPTOR_ERROR, "Invalid file descriptor." )
|
||||
ER2( PR_WOULD_BLOCK_ERROR, "The operation would have blocked." )
|
||||
ER2( PR_ACCESS_FAULT_ERROR, "Invalid memory address argument." )
|
||||
ER2( PR_INVALID_METHOD_ERROR, "Invalid function for file type." )
|
||||
ER2( PR_ILLEGAL_ACCESS_ERROR, "Invalid memory address argument." )
|
||||
ER2( PR_UNKNOWN_ERROR, "Some unknown error has occurred." )
|
||||
ER2( PR_PENDING_INTERRUPT_ERROR,"Operation interrupted by another thread." )
|
||||
ER2( PR_NOT_IMPLEMENTED_ERROR, "function not implemented." )
|
||||
ER2( PR_IO_ERROR, "I/O function error." )
|
||||
ER2( PR_IO_TIMEOUT_ERROR, "I/O operation timed out." )
|
||||
ER2( PR_IO_PENDING_ERROR, "I/O operation on busy file descriptor." )
|
||||
ER2( PR_DIRECTORY_OPEN_ERROR, "The directory could not be opened." )
|
||||
ER2( PR_INVALID_ARGUMENT_ERROR, "Invalid function argument." )
|
||||
ER2( PR_ADDRESS_NOT_AVAILABLE_ERROR, "Network address not available (in use?)." )
|
||||
ER2( PR_ADDRESS_NOT_SUPPORTED_ERROR, "Network address type not supported." )
|
||||
ER2( PR_IS_CONNECTED_ERROR, "Already connected." )
|
||||
ER2( PR_BAD_ADDRESS_ERROR, "Network address is invalid." )
|
||||
ER2( PR_ADDRESS_IN_USE_ERROR, "Local Network address is in use." )
|
||||
ER2( PR_CONNECT_REFUSED_ERROR, "Connection refused by peer." )
|
||||
ER2( PR_NETWORK_UNREACHABLE_ERROR, "Network address is presently unreachable." )
|
||||
ER2( PR_CONNECT_TIMEOUT_ERROR, "Connection attempt timed out." )
|
||||
ER2( PR_NOT_CONNECTED_ERROR, "Network file descriptor is not connected." )
|
||||
ER2( PR_LOAD_LIBRARY_ERROR, "Failure to load dynamic library." )
|
||||
ER2( PR_UNLOAD_LIBRARY_ERROR, "Failure to unload dynamic library." )
|
||||
ER2( PR_FIND_SYMBOL_ERROR,
|
||||
"Symbol not found in any of the loaded dynamic libraries." )
|
||||
ER2( PR_INSUFFICIENT_RESOURCES_ERROR, "Insufficient system resources." )
|
||||
ER2( PR_DIRECTORY_LOOKUP_ERROR,
|
||||
"A directory lookup on a network address has failed." )
|
||||
ER2( PR_TPD_RANGE_ERROR,
|
||||
"Attempt to access a TPD key that is out of range." )
|
||||
ER2( PR_PROC_DESC_TABLE_FULL_ERROR, "Process open FD table is full." )
|
||||
ER2( PR_SYS_DESC_TABLE_FULL_ERROR, "System open FD table is full." )
|
||||
ER2( PR_NOT_SOCKET_ERROR,
|
||||
"Network operation attempted on non-network file descriptor." )
|
||||
ER2( PR_NOT_TCP_SOCKET_ERROR,
|
||||
"TCP-specific function attempted on a non-TCP file descriptor." )
|
||||
ER2( PR_SOCKET_ADDRESS_IS_BOUND_ERROR, "TCP file descriptor is already bound." )
|
||||
ER2( PR_NO_ACCESS_RIGHTS_ERROR, "Access Denied." )
|
||||
ER2( PR_OPERATION_NOT_SUPPORTED_ERROR,
|
||||
"The requested operation is not supported by the platform." )
|
||||
ER2( PR_PROTOCOL_NOT_SUPPORTED_ERROR,
|
||||
"The host operating system does not support the protocol requested." )
|
||||
ER2( PR_REMOTE_FILE_ERROR, "Access to the remote file has been severed." )
|
||||
ER2( PR_BUFFER_OVERFLOW_ERROR,
|
||||
"The value requested is too large to be stored in the data buffer provided." )
|
||||
ER2( PR_CONNECT_RESET_ERROR, "TCP connection reset by peer." )
|
||||
ER2( PR_RANGE_ERROR, "Unused." )
|
||||
ER2( PR_DEADLOCK_ERROR, "The operation would have deadlocked." )
|
||||
ER2( PR_FILE_IS_LOCKED_ERROR, "The file is already locked." )
|
||||
ER2( PR_FILE_TOO_BIG_ERROR,
|
||||
"Write would result in file larger than the system allows." )
|
||||
ER2( PR_NO_DEVICE_SPACE_ERROR, "The device for storing the file is full." )
|
||||
ER2( PR_PIPE_ERROR, "Unused." )
|
||||
ER2( PR_NO_SEEK_DEVICE_ERROR, "Unused." )
|
||||
ER2( PR_IS_DIRECTORY_ERROR,
|
||||
"Cannot perform a normal file operation on a directory." )
|
||||
ER2( PR_LOOP_ERROR, "Symbolic link loop." )
|
||||
ER2( PR_NAME_TOO_LONG_ERROR, "File name is too long." )
|
||||
ER2( PR_FILE_NOT_FOUND_ERROR, "File not found." )
|
||||
ER2( PR_NOT_DIRECTORY_ERROR,
|
||||
"Cannot perform directory operation on a normal file." )
|
||||
ER2( PR_READ_ONLY_FILESYSTEM_ERROR,
|
||||
"Cannot write to a read-only file system." )
|
||||
ER2( PR_DIRECTORY_NOT_EMPTY_ERROR,
|
||||
"Cannot delete a directory that is not empty." )
|
||||
ER2( PR_FILESYSTEM_MOUNTED_ERROR,
|
||||
"Cannot delete or rename a file object while the file system is busy." )
|
||||
ER2( PR_NOT_SAME_DEVICE_ERROR,
|
||||
"Cannot rename a file to a file system on another device." )
|
||||
ER2( PR_DIRECTORY_CORRUPTED_ERROR,
|
||||
"The directory object in the file system is corrupted." )
|
||||
ER2( PR_FILE_EXISTS_ERROR,
|
||||
"Cannot create or rename a filename that already exists." )
|
||||
ER2( PR_MAX_DIRECTORY_ENTRIES_ERROR,
|
||||
"Directory is full. No additional filenames may be added." )
|
||||
ER2( PR_INVALID_DEVICE_STATE_ERROR,
|
||||
"The required device was in an invalid state." )
|
||||
ER2( PR_DEVICE_IS_LOCKED_ERROR, "The device is locked." )
|
||||
ER2( PR_NO_MORE_FILES_ERROR, "No more entries in the directory." )
|
||||
ER2( PR_END_OF_FILE_ERROR, "Encountered end of file." )
|
||||
ER2( PR_FILE_SEEK_ERROR, "Seek error." )
|
||||
ER2( PR_FILE_IS_BUSY_ERROR, "The file is busy." )
|
||||
ER2( PR_IN_PROGRESS_ERROR,
|
||||
"Operation is still in progress (probably a non-blocking connect)." )
|
||||
ER2( PR_ALREADY_INITIATED_ERROR,
|
||||
"Operation has already been initiated (probably a non-blocking connect)." )
|
||||
|
||||
#ifdef PR_GROUP_EMPTY_ERROR
|
||||
ER2( PR_GROUP_EMPTY_ERROR, "The wait group is empty." )
|
||||
#endif
|
||||
|
||||
#ifdef PR_INVALID_STATE_ERROR
|
||||
ER2( PR_INVALID_STATE_ERROR, "Object state improper for request." )
|
||||
#endif
|
||||
|
||||
#ifdef PR_NETWORK_DOWN_ERROR
|
||||
ER2( PR_NETWORK_DOWN_ERROR, "Network is down." )
|
||||
#endif
|
||||
|
||||
#ifdef PR_SOCKET_SHUTDOWN_ERROR
|
||||
ER2( PR_SOCKET_SHUTDOWN_ERROR, "The socket was previously shut down." )
|
||||
#endif
|
||||
|
||||
#ifdef PR_CONNECT_ABORTED_ERROR
|
||||
ER2( PR_CONNECT_ABORTED_ERROR, "TCP Connection aborted." )
|
||||
#endif
|
||||
|
||||
#ifdef PR_HOST_UNREACHABLE_ERROR
|
||||
ER2( PR_HOST_UNREACHABLE_ERROR, "Host is unreachable." )
|
||||
#endif
|
||||
|
||||
/* always last */
|
||||
ER2( PR_MAX_ERROR, "Placeholder for the end of the list" )
|
||||
521
mozilla/security/python/nss/src/SECerrs.h
Normal file
521
mozilla/security/python/nss/src/SECerrs.h
Normal file
@@ -0,0 +1,521 @@
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is the Netscape security libraries.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1994-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/* General security error codes */
|
||||
/* Caller must #include "secerr.h" */
|
||||
|
||||
ER3(SEC_ERROR_IO, SEC_ERROR_BASE + 0,
|
||||
"An I/O error occurred during security authorization.")
|
||||
|
||||
ER3(SEC_ERROR_LIBRARY_FAILURE, SEC_ERROR_BASE + 1,
|
||||
"security library failure.")
|
||||
|
||||
ER3(SEC_ERROR_BAD_DATA, SEC_ERROR_BASE + 2,
|
||||
"security library: received bad data.")
|
||||
|
||||
ER3(SEC_ERROR_OUTPUT_LEN, SEC_ERROR_BASE + 3,
|
||||
"security library: output length error.")
|
||||
|
||||
ER3(SEC_ERROR_INPUT_LEN, SEC_ERROR_BASE + 4,
|
||||
"security library has experienced an input length error.")
|
||||
|
||||
ER3(SEC_ERROR_INVALID_ARGS, SEC_ERROR_BASE + 5,
|
||||
"security library: invalid arguments.")
|
||||
|
||||
ER3(SEC_ERROR_INVALID_ALGORITHM, SEC_ERROR_BASE + 6,
|
||||
"security library: invalid algorithm.")
|
||||
|
||||
ER3(SEC_ERROR_INVALID_AVA, SEC_ERROR_BASE + 7,
|
||||
"security library: invalid AVA.")
|
||||
|
||||
ER3(SEC_ERROR_INVALID_TIME, SEC_ERROR_BASE + 8,
|
||||
"Improperly formatted time string.")
|
||||
|
||||
ER3(SEC_ERROR_BAD_DER, SEC_ERROR_BASE + 9,
|
||||
"security library: improperly formatted DER-encoded message.")
|
||||
|
||||
ER3(SEC_ERROR_BAD_SIGNATURE, SEC_ERROR_BASE + 10,
|
||||
"Peer's certificate has an invalid signature.")
|
||||
|
||||
ER3(SEC_ERROR_EXPIRED_CERTIFICATE, SEC_ERROR_BASE + 11,
|
||||
"Peer's Certificate has expired.")
|
||||
|
||||
ER3(SEC_ERROR_REVOKED_CERTIFICATE, SEC_ERROR_BASE + 12,
|
||||
"Peer's Certificate has been revoked.")
|
||||
|
||||
ER3(SEC_ERROR_UNKNOWN_ISSUER, SEC_ERROR_BASE + 13,
|
||||
"Peer's Certificate issuer is not recognized.")
|
||||
|
||||
ER3(SEC_ERROR_BAD_KEY, SEC_ERROR_BASE + 14,
|
||||
"Peer's public key is invalid.")
|
||||
|
||||
ER3(SEC_ERROR_BAD_PASSWORD, SEC_ERROR_BASE + 15,
|
||||
"The security password entered is incorrect.")
|
||||
|
||||
ER3(SEC_ERROR_RETRY_PASSWORD, SEC_ERROR_BASE + 16,
|
||||
"New password entered incorrectly. Please try again.")
|
||||
|
||||
ER3(SEC_ERROR_NO_NODELOCK, SEC_ERROR_BASE + 17,
|
||||
"security library: no nodelock.")
|
||||
|
||||
ER3(SEC_ERROR_BAD_DATABASE, SEC_ERROR_BASE + 18,
|
||||
"security library: bad database.")
|
||||
|
||||
ER3(SEC_ERROR_NO_MEMORY, SEC_ERROR_BASE + 19,
|
||||
"security library: memory allocation failure.")
|
||||
|
||||
ER3(SEC_ERROR_UNTRUSTED_ISSUER, SEC_ERROR_BASE + 20,
|
||||
"Peer's certificate issuer has been marked as not trusted by the user.")
|
||||
|
||||
ER3(SEC_ERROR_UNTRUSTED_CERT, SEC_ERROR_BASE + 21,
|
||||
"Peer's certificate has been marked as not trusted by the user.")
|
||||
|
||||
ER3(SEC_ERROR_DUPLICATE_CERT, (SEC_ERROR_BASE + 22),
|
||||
"Certificate already exists in your database.")
|
||||
|
||||
ER3(SEC_ERROR_DUPLICATE_CERT_NAME, (SEC_ERROR_BASE + 23),
|
||||
"Downloaded certificate's name duplicates one already in your database.")
|
||||
|
||||
ER3(SEC_ERROR_ADDING_CERT, (SEC_ERROR_BASE + 24),
|
||||
"Error adding certificate to database.")
|
||||
|
||||
ER3(SEC_ERROR_FILING_KEY, (SEC_ERROR_BASE + 25),
|
||||
"Error refiling the key for this certificate.")
|
||||
|
||||
ER3(SEC_ERROR_NO_KEY, (SEC_ERROR_BASE + 26),
|
||||
"The private key for this certificate cannot be found in key database")
|
||||
|
||||
ER3(SEC_ERROR_CERT_VALID, (SEC_ERROR_BASE + 27),
|
||||
"This certificate is valid.")
|
||||
|
||||
ER3(SEC_ERROR_CERT_NOT_VALID, (SEC_ERROR_BASE + 28),
|
||||
"This certificate is not valid.")
|
||||
|
||||
ER3(SEC_ERROR_CERT_NO_RESPONSE, (SEC_ERROR_BASE + 29),
|
||||
"Cert Library: No Response")
|
||||
|
||||
ER3(SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE, (SEC_ERROR_BASE + 30),
|
||||
"The certificate issuer's certificate has expired. Check your system date and time.")
|
||||
|
||||
ER3(SEC_ERROR_CRL_EXPIRED, (SEC_ERROR_BASE + 31),
|
||||
"The CRL for the certificate's issuer has expired. Update it or check your system date and time.")
|
||||
|
||||
ER3(SEC_ERROR_CRL_BAD_SIGNATURE, (SEC_ERROR_BASE + 32),
|
||||
"The CRL for the certificate's issuer has an invalid signature.")
|
||||
|
||||
ER3(SEC_ERROR_CRL_INVALID, (SEC_ERROR_BASE + 33),
|
||||
"New CRL has an invalid format.")
|
||||
|
||||
ER3(SEC_ERROR_EXTENSION_VALUE_INVALID, (SEC_ERROR_BASE + 34),
|
||||
"Certificate extension value is invalid.")
|
||||
|
||||
ER3(SEC_ERROR_EXTENSION_NOT_FOUND, (SEC_ERROR_BASE + 35),
|
||||
"Certificate extension not found.")
|
||||
|
||||
ER3(SEC_ERROR_CA_CERT_INVALID, (SEC_ERROR_BASE + 36),
|
||||
"Issuer certificate is invalid.")
|
||||
|
||||
ER3(SEC_ERROR_PATH_LEN_CONSTRAINT_INVALID, (SEC_ERROR_BASE + 37),
|
||||
"Certificate path length constraint is invalid.")
|
||||
|
||||
ER3(SEC_ERROR_CERT_USAGES_INVALID, (SEC_ERROR_BASE + 38),
|
||||
"Certificate usages field is invalid.")
|
||||
|
||||
ER3(SEC_INTERNAL_ONLY, (SEC_ERROR_BASE + 39),
|
||||
"**Internal ONLY module**")
|
||||
|
||||
ER3(SEC_ERROR_INVALID_KEY, (SEC_ERROR_BASE + 40),
|
||||
"The key does not support the requested operation.")
|
||||
|
||||
ER3(SEC_ERROR_UNKNOWN_CRITICAL_EXTENSION, (SEC_ERROR_BASE + 41),
|
||||
"Certificate contains unknown critical extension.")
|
||||
|
||||
ER3(SEC_ERROR_OLD_CRL, (SEC_ERROR_BASE + 42),
|
||||
"New CRL is not later than the current one.")
|
||||
|
||||
ER3(SEC_ERROR_NO_EMAIL_CERT, (SEC_ERROR_BASE + 43),
|
||||
"Not encrypted or signed: you do not yet have an email certificate.")
|
||||
|
||||
ER3(SEC_ERROR_NO_RECIPIENT_CERTS_QUERY, (SEC_ERROR_BASE + 44),
|
||||
"Not encrypted: you do not have certificates for each of the recipients.")
|
||||
|
||||
ER3(SEC_ERROR_NOT_A_RECIPIENT, (SEC_ERROR_BASE + 45),
|
||||
"Cannot decrypt: you are not a recipient, or matching certificate and \
|
||||
private key not found.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS7_KEYALG_MISMATCH, (SEC_ERROR_BASE + 46),
|
||||
"Cannot decrypt: key encryption algorithm does not match your certificate.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS7_BAD_SIGNATURE, (SEC_ERROR_BASE + 47),
|
||||
"Signature verification failed: no signer found, too many signers found, \
|
||||
or improper or corrupted data.")
|
||||
|
||||
ER3(SEC_ERROR_UNSUPPORTED_KEYALG, (SEC_ERROR_BASE + 48),
|
||||
"Unsupported or unknown key algorithm.")
|
||||
|
||||
ER3(SEC_ERROR_DECRYPTION_DISALLOWED, (SEC_ERROR_BASE + 49),
|
||||
"Cannot decrypt: encrypted using a disallowed algorithm or key size.")
|
||||
|
||||
|
||||
/* Fortezza Alerts */
|
||||
ER3(XP_SEC_FORTEZZA_BAD_CARD, (SEC_ERROR_BASE + 50),
|
||||
"Fortezza card has not been properly initialized. \
|
||||
Please remove it and return it to your issuer.")
|
||||
|
||||
ER3(XP_SEC_FORTEZZA_NO_CARD, (SEC_ERROR_BASE + 51),
|
||||
"No Fortezza cards Found")
|
||||
|
||||
ER3(XP_SEC_FORTEZZA_NONE_SELECTED, (SEC_ERROR_BASE + 52),
|
||||
"No Fortezza card selected")
|
||||
|
||||
ER3(XP_SEC_FORTEZZA_MORE_INFO, (SEC_ERROR_BASE + 53),
|
||||
"Please select a personality to get more info on")
|
||||
|
||||
ER3(XP_SEC_FORTEZZA_PERSON_NOT_FOUND, (SEC_ERROR_BASE + 54),
|
||||
"Personality not found")
|
||||
|
||||
ER3(XP_SEC_FORTEZZA_NO_MORE_INFO, (SEC_ERROR_BASE + 55),
|
||||
"No more information on that Personality")
|
||||
|
||||
ER3(XP_SEC_FORTEZZA_BAD_PIN, (SEC_ERROR_BASE + 56),
|
||||
"Invalid Pin")
|
||||
|
||||
ER3(XP_SEC_FORTEZZA_PERSON_ERROR, (SEC_ERROR_BASE + 57),
|
||||
"Couldn't initialize Fortezza personalities.")
|
||||
/* end fortezza alerts. */
|
||||
|
||||
ER3(SEC_ERROR_NO_KRL, (SEC_ERROR_BASE + 58),
|
||||
"No KRL for this site's certificate has been found.")
|
||||
|
||||
ER3(SEC_ERROR_KRL_EXPIRED, (SEC_ERROR_BASE + 59),
|
||||
"The KRL for this site's certificate has expired.")
|
||||
|
||||
ER3(SEC_ERROR_KRL_BAD_SIGNATURE, (SEC_ERROR_BASE + 60),
|
||||
"The KRL for this site's certificate has an invalid signature.")
|
||||
|
||||
ER3(SEC_ERROR_REVOKED_KEY, (SEC_ERROR_BASE + 61),
|
||||
"The key for this site's certificate has been revoked.")
|
||||
|
||||
ER3(SEC_ERROR_KRL_INVALID, (SEC_ERROR_BASE + 62),
|
||||
"New KRL has an invalid format.")
|
||||
|
||||
ER3(SEC_ERROR_NEED_RANDOM, (SEC_ERROR_BASE + 63),
|
||||
"security library: need random data.")
|
||||
|
||||
ER3(SEC_ERROR_NO_MODULE, (SEC_ERROR_BASE + 64),
|
||||
"security library: no security module can perform the requested operation.")
|
||||
|
||||
ER3(SEC_ERROR_NO_TOKEN, (SEC_ERROR_BASE + 65),
|
||||
"The security card or token does not exist, needs to be initialized, or has been removed.")
|
||||
|
||||
ER3(SEC_ERROR_READ_ONLY, (SEC_ERROR_BASE + 66),
|
||||
"security library: read-only database.")
|
||||
|
||||
ER3(SEC_ERROR_NO_SLOT_SELECTED, (SEC_ERROR_BASE + 67),
|
||||
"No slot or token was selected.")
|
||||
|
||||
ER3(SEC_ERROR_CERT_NICKNAME_COLLISION, (SEC_ERROR_BASE + 68),
|
||||
"A certificate with the same nickname already exists.")
|
||||
|
||||
ER3(SEC_ERROR_KEY_NICKNAME_COLLISION, (SEC_ERROR_BASE + 69),
|
||||
"A key with the same nickname already exists.")
|
||||
|
||||
ER3(SEC_ERROR_SAFE_NOT_CREATED, (SEC_ERROR_BASE + 70),
|
||||
"error while creating safe object")
|
||||
|
||||
ER3(SEC_ERROR_BAGGAGE_NOT_CREATED, (SEC_ERROR_BASE + 71),
|
||||
"error while creating baggage object")
|
||||
|
||||
ER3(XP_JAVA_REMOVE_PRINCIPAL_ERROR, (SEC_ERROR_BASE + 72),
|
||||
"Couldn't remove the principal")
|
||||
|
||||
ER3(XP_JAVA_DELETE_PRIVILEGE_ERROR, (SEC_ERROR_BASE + 73),
|
||||
"Couldn't delete the privilege")
|
||||
|
||||
ER3(XP_JAVA_CERT_NOT_EXISTS_ERROR, (SEC_ERROR_BASE + 74),
|
||||
"This principal doesn't have a certificate")
|
||||
|
||||
ER3(SEC_ERROR_BAD_EXPORT_ALGORITHM, (SEC_ERROR_BASE + 75),
|
||||
"Required algorithm is not allowed.")
|
||||
|
||||
ER3(SEC_ERROR_EXPORTING_CERTIFICATES, (SEC_ERROR_BASE + 76),
|
||||
"Error attempting to export certificates.")
|
||||
|
||||
ER3(SEC_ERROR_IMPORTING_CERTIFICATES, (SEC_ERROR_BASE + 77),
|
||||
"Error attempting to import certificates.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_DECODING_PFX, (SEC_ERROR_BASE + 78),
|
||||
"Unable to import. Decoding error. File not valid.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_INVALID_MAC, (SEC_ERROR_BASE + 79),
|
||||
"Unable to import. Invalid MAC. Incorrect password or corrupt file.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_UNSUPPORTED_MAC_ALGORITHM, (SEC_ERROR_BASE + 80),
|
||||
"Unable to import. MAC algorithm not supported.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_UNSUPPORTED_TRANSPORT_MODE,(SEC_ERROR_BASE + 81),
|
||||
"Unable to import. Only password integrity and privacy modes supported.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_CORRUPT_PFX_STRUCTURE, (SEC_ERROR_BASE + 82),
|
||||
"Unable to import. File structure is corrupt.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_UNSUPPORTED_PBE_ALGORITHM, (SEC_ERROR_BASE + 83),
|
||||
"Unable to import. Encryption algorithm not supported.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_UNSUPPORTED_VERSION, (SEC_ERROR_BASE + 84),
|
||||
"Unable to import. File version not supported.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_PRIVACY_PASSWORD_INCORRECT,(SEC_ERROR_BASE + 85),
|
||||
"Unable to import. Incorrect privacy password.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_CERT_COLLISION, (SEC_ERROR_BASE + 86),
|
||||
"Unable to import. Same nickname already exists in database.")
|
||||
|
||||
ER3(SEC_ERROR_USER_CANCELLED, (SEC_ERROR_BASE + 87),
|
||||
"The user pressed cancel.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_DUPLICATE_DATA, (SEC_ERROR_BASE + 88),
|
||||
"Not imported, already in database.")
|
||||
|
||||
ER3(SEC_ERROR_MESSAGE_SEND_ABORTED, (SEC_ERROR_BASE + 89),
|
||||
"Message not sent.")
|
||||
|
||||
ER3(SEC_ERROR_INADEQUATE_KEY_USAGE, (SEC_ERROR_BASE + 90),
|
||||
"Certificate key usage inadequate for attempted operation.")
|
||||
|
||||
ER3(SEC_ERROR_INADEQUATE_CERT_TYPE, (SEC_ERROR_BASE + 91),
|
||||
"Certificate type not approved for application.")
|
||||
|
||||
ER3(SEC_ERROR_CERT_ADDR_MISMATCH, (SEC_ERROR_BASE + 92),
|
||||
"Address in signing certificate does not match address in message headers.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_UNABLE_TO_IMPORT_KEY, (SEC_ERROR_BASE + 93),
|
||||
"Unable to import. Error attempting to import private key.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_IMPORTING_CERT_CHAIN, (SEC_ERROR_BASE + 94),
|
||||
"Unable to import. Error attempting to import certificate chain.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_UNABLE_TO_LOCATE_OBJECT_BY_NAME, (SEC_ERROR_BASE + 95),
|
||||
"Unable to export. Unable to locate certificate or key by nickname.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_UNABLE_TO_EXPORT_KEY, (SEC_ERROR_BASE + 96),
|
||||
"Unable to export. Private Key could not be located and exported.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_UNABLE_TO_WRITE, (SEC_ERROR_BASE + 97),
|
||||
"Unable to export. Unable to write the export file.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_UNABLE_TO_READ, (SEC_ERROR_BASE + 98),
|
||||
"Unable to import. Unable to read the import file.")
|
||||
|
||||
ER3(SEC_ERROR_PKCS12_KEY_DATABASE_NOT_INITIALIZED, (SEC_ERROR_BASE + 99),
|
||||
"Unable to export. Key database corrupt or deleted.")
|
||||
|
||||
ER3(SEC_ERROR_KEYGEN_FAIL, (SEC_ERROR_BASE + 100),
|
||||
"Unable to generate public/private key pair.")
|
||||
|
||||
ER3(SEC_ERROR_INVALID_PASSWORD, (SEC_ERROR_BASE + 101),
|
||||
"Password entered is invalid. Please pick a different one.")
|
||||
|
||||
ER3(SEC_ERROR_RETRY_OLD_PASSWORD, (SEC_ERROR_BASE + 102),
|
||||
"Old password entered incorrectly. Please try again.")
|
||||
|
||||
ER3(SEC_ERROR_BAD_NICKNAME, (SEC_ERROR_BASE + 103),
|
||||
"Certificate nickname already in use.")
|
||||
|
||||
ER3(SEC_ERROR_NOT_FORTEZZA_ISSUER, (SEC_ERROR_BASE + 104),
|
||||
"Peer FORTEZZA chain has a non-FORTEZZA Certificate.")
|
||||
|
||||
ER3(SEC_ERROR_CANNOT_MOVE_SENSITIVE_KEY, (SEC_ERROR_BASE + 105),
|
||||
"A sensitive key cannot be moved to the slot where it is needed.")
|
||||
|
||||
ER3(SEC_ERROR_JS_INVALID_MODULE_NAME, (SEC_ERROR_BASE + 106),
|
||||
"Invalid module name.")
|
||||
|
||||
ER3(SEC_ERROR_JS_INVALID_DLL, (SEC_ERROR_BASE + 107),
|
||||
"Invalid module path/filename")
|
||||
|
||||
ER3(SEC_ERROR_JS_ADD_MOD_FAILURE, (SEC_ERROR_BASE + 108),
|
||||
"Unable to add module")
|
||||
|
||||
ER3(SEC_ERROR_JS_DEL_MOD_FAILURE, (SEC_ERROR_BASE + 109),
|
||||
"Unable to delete module")
|
||||
|
||||
ER3(SEC_ERROR_OLD_KRL, (SEC_ERROR_BASE + 110),
|
||||
"New KRL is not later than the current one.")
|
||||
|
||||
ER3(SEC_ERROR_CKL_CONFLICT, (SEC_ERROR_BASE + 111),
|
||||
"New CKL has different issuer than current CKL. Delete current CKL.")
|
||||
|
||||
ER3(SEC_ERROR_CERT_NOT_IN_NAME_SPACE, (SEC_ERROR_BASE + 112),
|
||||
"The Certifying Authority for this certificate is not permitted to issue a \
|
||||
certificate with this name.")
|
||||
|
||||
ER3(SEC_ERROR_KRL_NOT_YET_VALID, (SEC_ERROR_BASE + 113),
|
||||
"The key revocation list for this certificate is not yet valid.")
|
||||
|
||||
ER3(SEC_ERROR_CRL_NOT_YET_VALID, (SEC_ERROR_BASE + 114),
|
||||
"The certificate revocation list for this certificate is not yet valid.")
|
||||
|
||||
ER3(SEC_ERROR_UNKNOWN_CERT, (SEC_ERROR_BASE + 115),
|
||||
"The requested certificate could not be found.")
|
||||
|
||||
ER3(SEC_ERROR_UNKNOWN_SIGNER, (SEC_ERROR_BASE + 116),
|
||||
"The signer's certificate could not be found.")
|
||||
|
||||
ER3(SEC_ERROR_CERT_BAD_ACCESS_LOCATION, (SEC_ERROR_BASE + 117),
|
||||
"The location for the certificate status server has invalid format.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_UNKNOWN_RESPONSE_TYPE, (SEC_ERROR_BASE + 118),
|
||||
"The OCSP response cannot be fully decoded; it is of an unknown type.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_BAD_HTTP_RESPONSE, (SEC_ERROR_BASE + 119),
|
||||
"The OCSP server returned unexpected/invalid HTTP data.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_MALFORMED_REQUEST, (SEC_ERROR_BASE + 120),
|
||||
"The OCSP server found the request to be corrupted or improperly formed.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_SERVER_ERROR, (SEC_ERROR_BASE + 121),
|
||||
"The OCSP server experienced an internal error.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_TRY_SERVER_LATER, (SEC_ERROR_BASE + 122),
|
||||
"The OCSP server suggests trying again later.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_REQUEST_NEEDS_SIG, (SEC_ERROR_BASE + 123),
|
||||
"The OCSP server requires a signature on this request.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_UNAUTHORIZED_REQUEST, (SEC_ERROR_BASE + 124),
|
||||
"The OCSP server has refused this request as unauthorized.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_UNKNOWN_RESPONSE_STATUS, (SEC_ERROR_BASE + 125),
|
||||
"The OCSP server returned an unrecognizable status.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_UNKNOWN_CERT, (SEC_ERROR_BASE + 126),
|
||||
"The OCSP server has no status for the certificate.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_NOT_ENABLED, (SEC_ERROR_BASE + 127),
|
||||
"You must enable OCSP before performing this operation.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_NO_DEFAULT_RESPONDER, (SEC_ERROR_BASE + 128),
|
||||
"You must set the OCSP default responder before performing this operation.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_MALFORMED_RESPONSE, (SEC_ERROR_BASE + 129),
|
||||
"The response from the OCSP server was corrupted or improperly formed.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_UNAUTHORIZED_RESPONSE, (SEC_ERROR_BASE + 130),
|
||||
"The signer of the OCSP response is not authorized to give status for \
|
||||
this certificate.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_FUTURE_RESPONSE, (SEC_ERROR_BASE + 131),
|
||||
"The OCSP response is not yet valid (contains a date in the future).")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_OLD_RESPONSE, (SEC_ERROR_BASE + 132),
|
||||
"The OCSP response contains out-of-date information.")
|
||||
|
||||
ER3(SEC_ERROR_DIGEST_NOT_FOUND, (SEC_ERROR_BASE + 133),
|
||||
"The CMS or PKCS #7 Digest was not found in signed message.")
|
||||
|
||||
ER3(SEC_ERROR_UNSUPPORTED_MESSAGE_TYPE, (SEC_ERROR_BASE + 134),
|
||||
"The CMS or PKCS #7 Message type is unsupported.")
|
||||
|
||||
ER3(SEC_ERROR_MODULE_STUCK, (SEC_ERROR_BASE + 135),
|
||||
"PKCS #11 module could not be removed because it is still in use.")
|
||||
|
||||
ER3(SEC_ERROR_BAD_TEMPLATE, (SEC_ERROR_BASE + 136),
|
||||
"Could not decode ASN.1 data. Specified template was invalid.")
|
||||
|
||||
ER3(SEC_ERROR_CRL_NOT_FOUND, (SEC_ERROR_BASE + 137),
|
||||
"No matching CRL was found.")
|
||||
|
||||
ER3(SEC_ERROR_REUSED_ISSUER_AND_SERIAL, (SEC_ERROR_BASE + 138),
|
||||
"You are attempting to import a cert with the same issuer/serial as \
|
||||
an existing cert, but that is not the same cert.")
|
||||
|
||||
ER3(SEC_ERROR_BUSY, (SEC_ERROR_BASE + 139),
|
||||
"NSS could not shutdown. Objects are still in use.")
|
||||
|
||||
ER3(SEC_ERROR_EXTRA_INPUT, (SEC_ERROR_BASE + 140),
|
||||
"DER-encoded message contained extra unused data.")
|
||||
|
||||
ER3(SEC_ERROR_UNSUPPORTED_ELLIPTIC_CURVE, (SEC_ERROR_BASE + 141),
|
||||
"Unsupported elliptic curve.")
|
||||
|
||||
ER3(SEC_ERROR_UNSUPPORTED_EC_POINT_FORM, (SEC_ERROR_BASE + 142),
|
||||
"Unsupported elliptic curve point form.")
|
||||
|
||||
ER3(SEC_ERROR_UNRECOGNIZED_OID, (SEC_ERROR_BASE + 143),
|
||||
"Unrecognized Object Identifier.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_INVALID_SIGNING_CERT, (SEC_ERROR_BASE + 144),
|
||||
"Invalid OCSP signing certificate in OCSP response.")
|
||||
|
||||
ER3(SEC_ERROR_REVOKED_CERTIFICATE_CRL, (SEC_ERROR_BASE + 145),
|
||||
"Certificate is revoked in issuer's certificate revocation list.")
|
||||
|
||||
ER3(SEC_ERROR_REVOKED_CERTIFICATE_OCSP, (SEC_ERROR_BASE + 146),
|
||||
"Issuer's OCSP responder reports certificate is revoked.")
|
||||
|
||||
ER3(SEC_ERROR_CRL_INVALID_VERSION, (SEC_ERROR_BASE + 147),
|
||||
"Issuer's Certificate Revocation List has an unknown version number.")
|
||||
|
||||
ER3(SEC_ERROR_CRL_V1_CRITICAL_EXTENSION, (SEC_ERROR_BASE + 148),
|
||||
"Issuer's V1 Certificate Revocation List has a critical extension.")
|
||||
|
||||
ER3(SEC_ERROR_CRL_UNKNOWN_CRITICAL_EXTENSION, (SEC_ERROR_BASE + 149),
|
||||
"Issuer's V2 Certificate Revocation List has an unknown critical extension.")
|
||||
|
||||
ER3(SEC_ERROR_UNKNOWN_OBJECT_TYPE, (SEC_ERROR_BASE + 150),
|
||||
"Unknown object type specified.")
|
||||
|
||||
ER3(SEC_ERROR_INCOMPATIBLE_PKCS11, (SEC_ERROR_BASE + 151),
|
||||
"PKCS #11 driver violates the spec in an incompatible way.")
|
||||
|
||||
ER3(SEC_ERROR_NO_EVENT, (SEC_ERROR_BASE + 152),
|
||||
"No new slot event is available at this time.")
|
||||
|
||||
ER3(SEC_ERROR_CRL_ALREADY_EXISTS, (SEC_ERROR_BASE + 153),
|
||||
"CRL already exists.")
|
||||
|
||||
ER3(SEC_ERROR_NOT_INITIALIZED, (SEC_ERROR_BASE + 154),
|
||||
"NSS is not initialized.")
|
||||
|
||||
ER3(SEC_ERROR_TOKEN_NOT_LOGGED_IN, (SEC_ERROR_BASE + 155),
|
||||
"The operation failed because the PKCS#11 token is not logged in.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_RESPONDER_CERT_INVALID, (SEC_ERROR_BASE + 156),
|
||||
"OCSP Trusted Responder Cert is invalid.")
|
||||
|
||||
ER3(SEC_ERROR_OCSP_BAD_SIGNATURE, (SEC_ERROR_BASE + 157),
|
||||
"OCSP response has an invalid signature.")
|
||||
386
mozilla/security/python/nss/src/SSLerrs.h
Normal file
386
mozilla/security/python/nss/src/SSLerrs.h
Normal file
@@ -0,0 +1,386 @@
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is the Netscape security libraries.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1994-2000
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/* SSL-specific security error codes */
|
||||
/* caller must include "sslerr.h" */
|
||||
|
||||
ER3(SSL_ERROR_EXPORT_ONLY_SERVER, SSL_ERROR_BASE + 0,
|
||||
"Unable to communicate securely. Peer does not support high-grade encryption.")
|
||||
|
||||
ER3(SSL_ERROR_US_ONLY_SERVER, SSL_ERROR_BASE + 1,
|
||||
"Unable to communicate securely. Peer requires high-grade encryption which is not supported.")
|
||||
|
||||
ER3(SSL_ERROR_NO_CYPHER_OVERLAP, SSL_ERROR_BASE + 2,
|
||||
"Cannot communicate securely with peer: no common encryption algorithm(s).")
|
||||
|
||||
ER3(SSL_ERROR_NO_CERTIFICATE, SSL_ERROR_BASE + 3,
|
||||
"Unable to find the certificate or key necessary for authentication.")
|
||||
|
||||
ER3(SSL_ERROR_BAD_CERTIFICATE, SSL_ERROR_BASE + 4,
|
||||
"Unable to communicate securely with peer: peers's certificate was rejected.")
|
||||
|
||||
/* unused (SSL_ERROR_BASE + 5),*/
|
||||
|
||||
ER3(SSL_ERROR_BAD_CLIENT, SSL_ERROR_BASE + 6,
|
||||
"The server has encountered bad data from the client.")
|
||||
|
||||
ER3(SSL_ERROR_BAD_SERVER, SSL_ERROR_BASE + 7,
|
||||
"The client has encountered bad data from the server.")
|
||||
|
||||
ER3(SSL_ERROR_UNSUPPORTED_CERTIFICATE_TYPE, SSL_ERROR_BASE + 8,
|
||||
"Unsupported certificate type.")
|
||||
|
||||
ER3(SSL_ERROR_UNSUPPORTED_VERSION, SSL_ERROR_BASE + 9,
|
||||
"Peer using unsupported version of security protocol.")
|
||||
|
||||
/* unused (SSL_ERROR_BASE + 10),*/
|
||||
|
||||
ER3(SSL_ERROR_WRONG_CERTIFICATE, SSL_ERROR_BASE + 11,
|
||||
"Client authentication failed: private key in key database does not match public key in certificate database.")
|
||||
|
||||
ER3(SSL_ERROR_BAD_CERT_DOMAIN, SSL_ERROR_BASE + 12,
|
||||
"Unable to communicate securely with peer: requested domain name does not match the server's certificate.")
|
||||
|
||||
/* SSL_ERROR_POST_WARNING (SSL_ERROR_BASE + 13),
|
||||
defined in sslerr.h
|
||||
*/
|
||||
|
||||
ER3(SSL_ERROR_SSL2_DISABLED, (SSL_ERROR_BASE + 14),
|
||||
"Peer only supports SSL version 2, which is locally disabled.")
|
||||
|
||||
|
||||
ER3(SSL_ERROR_BAD_MAC_READ, (SSL_ERROR_BASE + 15),
|
||||
"SSL received a record with an incorrect Message Authentication Code.")
|
||||
|
||||
ER3(SSL_ERROR_BAD_MAC_ALERT, (SSL_ERROR_BASE + 16),
|
||||
"SSL peer reports incorrect Message Authentication Code.")
|
||||
|
||||
ER3(SSL_ERROR_BAD_CERT_ALERT, (SSL_ERROR_BASE + 17),
|
||||
"SSL peer cannot verify your certificate.")
|
||||
|
||||
ER3(SSL_ERROR_REVOKED_CERT_ALERT, (SSL_ERROR_BASE + 18),
|
||||
"SSL peer rejected your certificate as revoked.")
|
||||
|
||||
ER3(SSL_ERROR_EXPIRED_CERT_ALERT, (SSL_ERROR_BASE + 19),
|
||||
"SSL peer rejected your certificate as expired.")
|
||||
|
||||
ER3(SSL_ERROR_SSL_DISABLED, (SSL_ERROR_BASE + 20),
|
||||
"Cannot connect: SSL is disabled.")
|
||||
|
||||
ER3(SSL_ERROR_FORTEZZA_PQG, (SSL_ERROR_BASE + 21),
|
||||
"Cannot connect: SSL peer is in another FORTEZZA domain.")
|
||||
|
||||
|
||||
ER3(SSL_ERROR_UNKNOWN_CIPHER_SUITE , (SSL_ERROR_BASE + 22),
|
||||
"An unknown SSL cipher suite has been requested.")
|
||||
|
||||
ER3(SSL_ERROR_NO_CIPHERS_SUPPORTED , (SSL_ERROR_BASE + 23),
|
||||
"No cipher suites are present and enabled in this program.")
|
||||
|
||||
ER3(SSL_ERROR_BAD_BLOCK_PADDING , (SSL_ERROR_BASE + 24),
|
||||
"SSL received a record with bad block padding.")
|
||||
|
||||
ER3(SSL_ERROR_RX_RECORD_TOO_LONG , (SSL_ERROR_BASE + 25),
|
||||
"SSL received a record that exceeded the maximum permissible length.")
|
||||
|
||||
ER3(SSL_ERROR_TX_RECORD_TOO_LONG , (SSL_ERROR_BASE + 26),
|
||||
"SSL attempted to send a record that exceeded the maximum permissible length.")
|
||||
|
||||
/*
|
||||
* Received a malformed (too long or short or invalid content) SSL handshake.
|
||||
*/
|
||||
ER3(SSL_ERROR_RX_MALFORMED_HELLO_REQUEST , (SSL_ERROR_BASE + 27),
|
||||
"SSL received a malformed Hello Request handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_MALFORMED_CLIENT_HELLO , (SSL_ERROR_BASE + 28),
|
||||
"SSL received a malformed Client Hello handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_MALFORMED_SERVER_HELLO , (SSL_ERROR_BASE + 29),
|
||||
"SSL received a malformed Server Hello handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_MALFORMED_CERTIFICATE , (SSL_ERROR_BASE + 30),
|
||||
"SSL received a malformed Certificate handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_MALFORMED_SERVER_KEY_EXCH , (SSL_ERROR_BASE + 31),
|
||||
"SSL received a malformed Server Key Exchange handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_MALFORMED_CERT_REQUEST , (SSL_ERROR_BASE + 32),
|
||||
"SSL received a malformed Certificate Request handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_MALFORMED_HELLO_DONE , (SSL_ERROR_BASE + 33),
|
||||
"SSL received a malformed Server Hello Done handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_MALFORMED_CERT_VERIFY , (SSL_ERROR_BASE + 34),
|
||||
"SSL received a malformed Certificate Verify handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_MALFORMED_CLIENT_KEY_EXCH , (SSL_ERROR_BASE + 35),
|
||||
"SSL received a malformed Client Key Exchange handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_MALFORMED_FINISHED , (SSL_ERROR_BASE + 36),
|
||||
"SSL received a malformed Finished handshake message.")
|
||||
|
||||
/*
|
||||
* Received a malformed (too long or short) SSL record.
|
||||
*/
|
||||
ER3(SSL_ERROR_RX_MALFORMED_CHANGE_CIPHER , (SSL_ERROR_BASE + 37),
|
||||
"SSL received a malformed Change Cipher Spec record.")
|
||||
|
||||
ER3(SSL_ERROR_RX_MALFORMED_ALERT , (SSL_ERROR_BASE + 38),
|
||||
"SSL received a malformed Alert record.")
|
||||
|
||||
ER3(SSL_ERROR_RX_MALFORMED_HANDSHAKE , (SSL_ERROR_BASE + 39),
|
||||
"SSL received a malformed Handshake record.")
|
||||
|
||||
ER3(SSL_ERROR_RX_MALFORMED_APPLICATION_DATA , (SSL_ERROR_BASE + 40),
|
||||
"SSL received a malformed Application Data record.")
|
||||
|
||||
/*
|
||||
* Received an SSL handshake that was inappropriate for the state we're in.
|
||||
* E.g. Server received message from server, or wrong state in state machine.
|
||||
*/
|
||||
ER3(SSL_ERROR_RX_UNEXPECTED_HELLO_REQUEST , (SSL_ERROR_BASE + 41),
|
||||
"SSL received an unexpected Hello Request handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_UNEXPECTED_CLIENT_HELLO , (SSL_ERROR_BASE + 42),
|
||||
"SSL received an unexpected Client Hello handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_UNEXPECTED_SERVER_HELLO , (SSL_ERROR_BASE + 43),
|
||||
"SSL received an unexpected Server Hello handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_UNEXPECTED_CERTIFICATE , (SSL_ERROR_BASE + 44),
|
||||
"SSL received an unexpected Certificate handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_UNEXPECTED_SERVER_KEY_EXCH , (SSL_ERROR_BASE + 45),
|
||||
"SSL received an unexpected Server Key Exchange handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_UNEXPECTED_CERT_REQUEST , (SSL_ERROR_BASE + 46),
|
||||
"SSL received an unexpected Certificate Request handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_UNEXPECTED_HELLO_DONE , (SSL_ERROR_BASE + 47),
|
||||
"SSL received an unexpected Server Hello Done handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_UNEXPECTED_CERT_VERIFY , (SSL_ERROR_BASE + 48),
|
||||
"SSL received an unexpected Certificate Verify handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_UNEXPECTED_CLIENT_KEY_EXCH , (SSL_ERROR_BASE + 49),
|
||||
"SSL received an unexpected Client Key Exchange handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_RX_UNEXPECTED_FINISHED , (SSL_ERROR_BASE + 50),
|
||||
"SSL received an unexpected Finished handshake message.")
|
||||
|
||||
/*
|
||||
* Received an SSL record that was inappropriate for the state we're in.
|
||||
*/
|
||||
ER3(SSL_ERROR_RX_UNEXPECTED_CHANGE_CIPHER , (SSL_ERROR_BASE + 51),
|
||||
"SSL received an unexpected Change Cipher Spec record.")
|
||||
|
||||
ER3(SSL_ERROR_RX_UNEXPECTED_ALERT , (SSL_ERROR_BASE + 52),
|
||||
"SSL received an unexpected Alert record.")
|
||||
|
||||
ER3(SSL_ERROR_RX_UNEXPECTED_HANDSHAKE , (SSL_ERROR_BASE + 53),
|
||||
"SSL received an unexpected Handshake record.")
|
||||
|
||||
ER3(SSL_ERROR_RX_UNEXPECTED_APPLICATION_DATA, (SSL_ERROR_BASE + 54),
|
||||
"SSL received an unexpected Application Data record.")
|
||||
|
||||
/*
|
||||
* Received record/message with unknown discriminant.
|
||||
*/
|
||||
ER3(SSL_ERROR_RX_UNKNOWN_RECORD_TYPE , (SSL_ERROR_BASE + 55),
|
||||
"SSL received a record with an unknown content type.")
|
||||
|
||||
ER3(SSL_ERROR_RX_UNKNOWN_HANDSHAKE , (SSL_ERROR_BASE + 56),
|
||||
"SSL received a handshake message with an unknown message type.")
|
||||
|
||||
ER3(SSL_ERROR_RX_UNKNOWN_ALERT , (SSL_ERROR_BASE + 57),
|
||||
"SSL received an alert record with an unknown alert description.")
|
||||
|
||||
/*
|
||||
* Received an alert reporting what we did wrong. (more alerts above)
|
||||
*/
|
||||
ER3(SSL_ERROR_CLOSE_NOTIFY_ALERT , (SSL_ERROR_BASE + 58),
|
||||
"SSL peer has closed this connection.")
|
||||
|
||||
ER3(SSL_ERROR_HANDSHAKE_UNEXPECTED_ALERT , (SSL_ERROR_BASE + 59),
|
||||
"SSL peer was not expecting a handshake message it received.")
|
||||
|
||||
ER3(SSL_ERROR_DECOMPRESSION_FAILURE_ALERT , (SSL_ERROR_BASE + 60),
|
||||
"SSL peer was unable to successfully decompress an SSL record it received.")
|
||||
|
||||
ER3(SSL_ERROR_HANDSHAKE_FAILURE_ALERT , (SSL_ERROR_BASE + 61),
|
||||
"SSL peer was unable to negotiate an acceptable set of security parameters.")
|
||||
|
||||
ER3(SSL_ERROR_ILLEGAL_PARAMETER_ALERT , (SSL_ERROR_BASE + 62),
|
||||
"SSL peer rejected a handshake message for unacceptable content.")
|
||||
|
||||
ER3(SSL_ERROR_UNSUPPORTED_CERT_ALERT , (SSL_ERROR_BASE + 63),
|
||||
"SSL peer does not support certificates of the type it received.")
|
||||
|
||||
ER3(SSL_ERROR_CERTIFICATE_UNKNOWN_ALERT , (SSL_ERROR_BASE + 64),
|
||||
"SSL peer had some unspecified issue with the certificate it received.")
|
||||
|
||||
|
||||
ER3(SSL_ERROR_GENERATE_RANDOM_FAILURE , (SSL_ERROR_BASE + 65),
|
||||
"SSL experienced a failure of its random number generator.")
|
||||
|
||||
ER3(SSL_ERROR_SIGN_HASHES_FAILURE , (SSL_ERROR_BASE + 66),
|
||||
"Unable to digitally sign data required to verify your certificate.")
|
||||
|
||||
ER3(SSL_ERROR_EXTRACT_PUBLIC_KEY_FAILURE , (SSL_ERROR_BASE + 67),
|
||||
"SSL was unable to extract the public key from the peer's certificate.")
|
||||
|
||||
ER3(SSL_ERROR_SERVER_KEY_EXCHANGE_FAILURE , (SSL_ERROR_BASE + 68),
|
||||
"Unspecified failure while processing SSL Server Key Exchange handshake.")
|
||||
|
||||
ER3(SSL_ERROR_CLIENT_KEY_EXCHANGE_FAILURE , (SSL_ERROR_BASE + 69),
|
||||
"Unspecified failure while processing SSL Client Key Exchange handshake.")
|
||||
|
||||
ER3(SSL_ERROR_ENCRYPTION_FAILURE , (SSL_ERROR_BASE + 70),
|
||||
"Bulk data encryption algorithm failed in selected cipher suite.")
|
||||
|
||||
ER3(SSL_ERROR_DECRYPTION_FAILURE , (SSL_ERROR_BASE + 71),
|
||||
"Bulk data decryption algorithm failed in selected cipher suite.")
|
||||
|
||||
ER3(SSL_ERROR_SOCKET_WRITE_FAILURE , (SSL_ERROR_BASE + 72),
|
||||
"Attempt to write encrypted data to underlying socket failed.")
|
||||
|
||||
ER3(SSL_ERROR_MD5_DIGEST_FAILURE , (SSL_ERROR_BASE + 73),
|
||||
"MD5 digest function failed.")
|
||||
|
||||
ER3(SSL_ERROR_SHA_DIGEST_FAILURE , (SSL_ERROR_BASE + 74),
|
||||
"SHA-1 digest function failed.")
|
||||
|
||||
ER3(SSL_ERROR_MAC_COMPUTATION_FAILURE , (SSL_ERROR_BASE + 75),
|
||||
"MAC computation failed.")
|
||||
|
||||
ER3(SSL_ERROR_SYM_KEY_CONTEXT_FAILURE , (SSL_ERROR_BASE + 76),
|
||||
"Failure to create Symmetric Key context.")
|
||||
|
||||
ER3(SSL_ERROR_SYM_KEY_UNWRAP_FAILURE , (SSL_ERROR_BASE + 77),
|
||||
"Failure to unwrap the Symmetric key in Client Key Exchange message.")
|
||||
|
||||
ER3(SSL_ERROR_PUB_KEY_SIZE_LIMIT_EXCEEDED , (SSL_ERROR_BASE + 78),
|
||||
"SSL Server attempted to use domestic-grade public key with export cipher suite.")
|
||||
|
||||
ER3(SSL_ERROR_IV_PARAM_FAILURE , (SSL_ERROR_BASE + 79),
|
||||
"PKCS11 code failed to translate an IV into a param.")
|
||||
|
||||
ER3(SSL_ERROR_INIT_CIPHER_SUITE_FAILURE , (SSL_ERROR_BASE + 80),
|
||||
"Failed to initialize the selected cipher suite.")
|
||||
|
||||
ER3(SSL_ERROR_SESSION_KEY_GEN_FAILURE , (SSL_ERROR_BASE + 81),
|
||||
"Client failed to generate session keys for SSL session.")
|
||||
|
||||
ER3(SSL_ERROR_NO_SERVER_KEY_FOR_ALG , (SSL_ERROR_BASE + 82),
|
||||
"Server has no key for the attempted key exchange algorithm.")
|
||||
|
||||
ER3(SSL_ERROR_TOKEN_INSERTION_REMOVAL , (SSL_ERROR_BASE + 83),
|
||||
"PKCS#11 token was inserted or removed while operation was in progress.")
|
||||
|
||||
ER3(SSL_ERROR_TOKEN_SLOT_NOT_FOUND , (SSL_ERROR_BASE + 84),
|
||||
"No PKCS#11 token could be found to do a required operation.")
|
||||
|
||||
ER3(SSL_ERROR_NO_COMPRESSION_OVERLAP , (SSL_ERROR_BASE + 85),
|
||||
"Cannot communicate securely with peer: no common compression algorithm(s).")
|
||||
|
||||
ER3(SSL_ERROR_HANDSHAKE_NOT_COMPLETED , (SSL_ERROR_BASE + 86),
|
||||
"Cannot initiate another SSL handshake until current handshake is complete.")
|
||||
|
||||
ER3(SSL_ERROR_BAD_HANDSHAKE_HASH_VALUE , (SSL_ERROR_BASE + 87),
|
||||
"Received incorrect handshakes hash values from peer.")
|
||||
|
||||
ER3(SSL_ERROR_CERT_KEA_MISMATCH , (SSL_ERROR_BASE + 88),
|
||||
"The certificate provided cannot be used with the selected key exchange algorithm.")
|
||||
|
||||
ER3(SSL_ERROR_NO_TRUSTED_SSL_CLIENT_CA , (SSL_ERROR_BASE + 89),
|
||||
"No certificate authority is trusted for SSL client authentication.")
|
||||
|
||||
ER3(SSL_ERROR_SESSION_NOT_FOUND , (SSL_ERROR_BASE + 90),
|
||||
"Client's SSL session ID not found in server's session cache.")
|
||||
|
||||
ER3(SSL_ERROR_DECRYPTION_FAILED_ALERT , (SSL_ERROR_BASE + 91),
|
||||
"Peer was unable to decrypt an SSL record it received.")
|
||||
|
||||
ER3(SSL_ERROR_RECORD_OVERFLOW_ALERT , (SSL_ERROR_BASE + 92),
|
||||
"Peer received an SSL record that was longer than is permitted.")
|
||||
|
||||
ER3(SSL_ERROR_UNKNOWN_CA_ALERT , (SSL_ERROR_BASE + 93),
|
||||
"Peer does not recognize and trust the CA that issued your certificate.")
|
||||
|
||||
ER3(SSL_ERROR_ACCESS_DENIED_ALERT , (SSL_ERROR_BASE + 94),
|
||||
"Peer received a valid certificate, but access was denied.")
|
||||
|
||||
ER3(SSL_ERROR_DECODE_ERROR_ALERT , (SSL_ERROR_BASE + 95),
|
||||
"Peer could not decode an SSL handshake message.")
|
||||
|
||||
ER3(SSL_ERROR_DECRYPT_ERROR_ALERT , (SSL_ERROR_BASE + 96),
|
||||
"Peer reports failure of signature verification or key exchange.")
|
||||
|
||||
ER3(SSL_ERROR_EXPORT_RESTRICTION_ALERT , (SSL_ERROR_BASE + 97),
|
||||
"Peer reports negotiation not in compliance with export regulations.")
|
||||
|
||||
ER3(SSL_ERROR_PROTOCOL_VERSION_ALERT , (SSL_ERROR_BASE + 98),
|
||||
"Peer reports incompatible or unsupported protocol version.")
|
||||
|
||||
ER3(SSL_ERROR_INSUFFICIENT_SECURITY_ALERT , (SSL_ERROR_BASE + 99),
|
||||
"Server requires ciphers more secure than those supported by client.")
|
||||
|
||||
ER3(SSL_ERROR_INTERNAL_ERROR_ALERT , (SSL_ERROR_BASE + 100),
|
||||
"Peer reports it experienced an internal error.")
|
||||
|
||||
ER3(SSL_ERROR_USER_CANCELED_ALERT , (SSL_ERROR_BASE + 101),
|
||||
"Peer user canceled handshake.")
|
||||
|
||||
ER3(SSL_ERROR_NO_RENEGOTIATION_ALERT , (SSL_ERROR_BASE + 102),
|
||||
"Peer does not permit renegotiation of SSL security parameters.")
|
||||
|
||||
ER3(SSL_ERROR_SERVER_CACHE_NOT_CONFIGURED , (SSL_ERROR_BASE + 103),
|
||||
"SSL server cache not configured and not disabled for this socket.")
|
||||
|
||||
ER3(SSL_ERROR_UNSUPPORTED_EXTENSION_ALERT , (SSL_ERROR_BASE + 104),
|
||||
"SSL peer does not support requested TLS hello extension.")
|
||||
|
||||
ER3(SSL_ERROR_CERTIFICATE_UNOBTAINABLE_ALERT , (SSL_ERROR_BASE + 105),
|
||||
"SSL peer could not obtain your certificate from the supplied URL.")
|
||||
|
||||
ER3(SSL_ERROR_UNRECOGNIZED_NAME_ALERT , (SSL_ERROR_BASE + 106),
|
||||
"SSL peer has no certificate for the requested DNS name.")
|
||||
|
||||
ER3(SSL_ERROR_BAD_CERT_STATUS_RESPONSE_ALERT , (SSL_ERROR_BASE + 107),
|
||||
"SSL peer was unable to get an OCSP response for its certificate.")
|
||||
|
||||
ER3(SSL_ERROR_BAD_CERT_HASH_VALUE_ALERT , (SSL_ERROR_BASE + 108),
|
||||
"SSL peer reported bad certificate hash value.")
|
||||
298
mozilla/security/python/nss/src/__init__.py
Normal file
298
mozilla/security/python/nss/src/__init__.py
Normal file
@@ -0,0 +1,298 @@
|
||||
# ***** BEGIN LICENSE BLOCK *****
|
||||
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public License Version
|
||||
# 1.1 (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
# http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
# for the specific language governing rights and limitations under the
|
||||
# License.
|
||||
#
|
||||
# The Original Code is a Python binding for Network Security Services (NSS).
|
||||
#
|
||||
# The Initial Developer of the Original Code is Red Hat, Inc.
|
||||
# (Author: John Dennis <jdennis@redhat.com>)
|
||||
#
|
||||
# Portions created by the Initial Developer are Copyright (C) 2008,2009
|
||||
# the Initial Developer. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the terms of
|
||||
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
# in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
# of those above. If you wish to allow use of your version of this file only
|
||||
# under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
# use your version of this file under the terms of the MPL, indicate your
|
||||
# decision by deleting the provisions above and replace them with the notice
|
||||
# and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
# the provisions above, a recipient may use your version of this file under
|
||||
# the terms of any one of the MPL, the GPL or the LGPL.
|
||||
#
|
||||
# ***** END LICENSE BLOCK *****
|
||||
"""
|
||||
============
|
||||
Introduction
|
||||
============
|
||||
|
||||
This package provides a binding for the Network Security Services
|
||||
(NSS) library. Because NSS directly uses the Netscape Portable Runtime
|
||||
(NSPR) the binding also provides support for NSPR. There is an
|
||||
inherent conflict between NSPR and Python, please see the Issues
|
||||
section for more detail.
|
||||
|
||||
General documentation on NSS can be found here:
|
||||
|
||||
http://www.mozilla.org/projects/security/pki/nss
|
||||
|
||||
General documentation on NSPR can be found here:
|
||||
|
||||
http://developer.mozilla.org/en/docs/NSPR_API_Reference
|
||||
|
||||
Please note, the documentation included with this package already
|
||||
encapsultes most of the information at the above two URL's, but is
|
||||
specific to the python binding of NSS/NSPR. It is suggested you refer
|
||||
to the python-nss documentation.
|
||||
|
||||
Most of the names and symbols in the NSS/NSPR C API have been kept in
|
||||
the nss-python binding and should be instantly familar or
|
||||
recognizable. Python has different naming conventions and the
|
||||
nss-python binding has adhered to the python naming convensions,
|
||||
Classes are camel case, otherwise symbols are all lower case with
|
||||
words seperated by underscores. The constants used by NSS/NSPR in C
|
||||
API have been imported literally to add the programmer who might be
|
||||
referring to the Mozilla NSS/NSPR documentation and/or header files or
|
||||
who is porting an existing C application to python. Minor other
|
||||
changes have been made in the interest of being "Pythonic".
|
||||
|
||||
===============
|
||||
Getting Started
|
||||
===============
|
||||
|
||||
NSS stores it's certificates and private keys in a security database
|
||||
unlike OpenSSL which references it's certificates and keys via file
|
||||
pathnames. This means unless you already have an NSS Certificate
|
||||
Database (CertDB) the first order of business will be to create
|
||||
one. When a NSS application initializes itself it will need to specify
|
||||
the path to the CertDB (see "Things All NSS programs must do").
|
||||
|
||||
The CertDB is created and manipulated by the command line utilities
|
||||
certutil and modutil. Both of these programs are part of the nss-tools
|
||||
RPM. Documentation for these tools can be found here:
|
||||
http://www.mozilla.org/projects/security/pki/nss/tools
|
||||
|
||||
Here is an example of creating a CertDB and populating it. In the
|
||||
example the CertDB will be created under the directory "./pki", the CA
|
||||
will be called "myca", the database password will be "myca", and the
|
||||
server's hostname will be "myhost.example.com".
|
||||
|
||||
1. Create the database::
|
||||
|
||||
certutil -N -d ./pki
|
||||
|
||||
This creates a new database under the directory ./pki
|
||||
|
||||
2. Create a root CA certificate::
|
||||
|
||||
certutil -d ./pki -S -s "CN=myca" -n myca -x -t "CTu,C,C" -m 1
|
||||
|
||||
This creates an individual certificate and adds it to the
|
||||
certificate database with a subject of "CN=myca", a nickname of
|
||||
"myca", trust flags indicating for SSL indicating it can issue
|
||||
server certificates (C), can issue client certificates (T), and the
|
||||
certificate can be used for authentication and signing (u). For
|
||||
email and object signing it's trusted to create server
|
||||
certificates. The certificate serial number is set to 1.
|
||||
|
||||
|
||||
3. Create a server certificate and sign it. Our example server will
|
||||
use this::
|
||||
|
||||
certutil -d pki -S -c myca -s "CN=myhost.example.com" -n myhost -t "C,C,C" -m 2
|
||||
|
||||
This creates an individual certificate issued by the CA "myca" and
|
||||
adds it to the certificate database with a subject of
|
||||
"CN=myhost.example.com", a nickname of "myhost". The certificate
|
||||
serial number is set to 2.
|
||||
|
||||
4. Import public root CA's::
|
||||
|
||||
modutil -add ca_certs -libfile /usr/lib/libnssckbi.so -dbdir ./pki
|
||||
|
||||
This is necessary to verify certificates presented by a SSL server a
|
||||
NSS client might connect to. When verifying a certificate the NSS
|
||||
library will "walk the certificate chain" back to a root CA which
|
||||
must be trusted. This command imports the well known root CA's as a
|
||||
PKCS #11 module.
|
||||
|
||||
|
||||
===============================
|
||||
Things All NSS programs must do
|
||||
===============================
|
||||
|
||||
- Import the NSS/NSPR modules::
|
||||
|
||||
from nss.error import NSPRError
|
||||
import nss.io as io
|
||||
import nss.nss as nss
|
||||
import nss.ssl as ssl
|
||||
|
||||
In the interest of code brevity we drop the leading "nss." from the
|
||||
module namespace.
|
||||
|
||||
- Initialize NSS and indicate the certficate database (CertDB)::
|
||||
|
||||
certdir = './pki'
|
||||
ssl.nssinit(certdir)
|
||||
|
||||
- If you are implementing an SSL server call config_secure_server()
|
||||
(see ssl_example.py)::
|
||||
|
||||
sock = ssl.SSLSocket()
|
||||
sock.config_secure_server(server_cert, priv_key, server_cert_kea)
|
||||
|
||||
**WARNING** you must call config_secure_server() for SSL servers, if
|
||||
you do not call it the most likely result will be the NSS library
|
||||
will segfault (not pretty).
|
||||
|
||||
========
|
||||
Examples
|
||||
========
|
||||
|
||||
There are example programs in under "examples" in the documentation
|
||||
directory. On Fedora/RHEL/CentOS systems this will be
|
||||
/usr/share/doc/python-nss.
|
||||
|
||||
The ssl_example.py sample implements both a client and server in one
|
||||
script. You tell it whether to run as a client (-C) or a server (-S)
|
||||
when you invoke it. The sample shows many of the NSS/NSPR calls and
|
||||
fully implements basic non-SSL client/server using NSPR, SSL
|
||||
client/server using NSS, certificate validation, CertDB operations,
|
||||
and client authentication using certificates.
|
||||
|
||||
To get a list of command line options::
|
||||
|
||||
ssl_example.py --help
|
||||
|
||||
Using the above example certificate database server can be run like
|
||||
this::
|
||||
|
||||
ssl_example.py -S -c ./pki -n myhost
|
||||
|
||||
The client can be run like this::
|
||||
|
||||
ssl_example.py -C -c ./pki
|
||||
|
||||
======
|
||||
Issues
|
||||
======
|
||||
|
||||
- The current partitioning of the NSS and NSPR API's into Python
|
||||
modules (i.e. the Python namespaces and their symbols) is a first
|
||||
cut and may not be ideal. One should be prepared for name changes as
|
||||
the binding matures.
|
||||
|
||||
- NSPR vs. Python
|
||||
|
||||
An original design goal of NSS was to be portable, however NSS
|
||||
required access to many system level functions which can vary
|
||||
widely between platforms and OS's. Therefore NSPR was written to
|
||||
encapsulate system services such as IO, sockets, threads, timers,
|
||||
etc. into a common API to insulate NSS from the underlying
|
||||
platform.
|
||||
|
||||
In many respects Python and its collection of packages and modules
|
||||
provides the same type of platform independence for applications
|
||||
and libraries and provides it's own implementation of IO, sockets,
|
||||
threads, timers, etc.
|
||||
|
||||
Unfortunately NSPR's and Python's run time abstractions are not
|
||||
the same nor can either be configured to use a different
|
||||
underlying abstraction layer.
|
||||
|
||||
Currently the NSS binding utilizes *only* the NSPR abstraction
|
||||
layer. One consequence of this is it is not possible to create a
|
||||
Python socket and use it as the foundation for any NSS functions
|
||||
expecting a socket, or visa versa.
|
||||
|
||||
You **must** use the nss.io module to create and manipulate a
|
||||
socket used by NSS. You cannot pass this socket to any Python
|
||||
library function expecting a socket. The two are not compatible.
|
||||
|
||||
Here are some reasons for this incompatibility, perhaps in the
|
||||
future we can find a solution but the immediate goal of the NSS
|
||||
Python binding was to expose NSS through Python, not necessarily
|
||||
to solve the larger integration issue of Python run-time and NSPR
|
||||
run-time.
|
||||
|
||||
- NSPR would like to hide the underlying platform socket (in the
|
||||
NSPR code this is called "osfd"). There are NSPR API's which
|
||||
will operate on osfd's
|
||||
|
||||
- One can base a NSPR socket on an existing osfd via:
|
||||
|
||||
- PR_ImportFile()
|
||||
- PR_ImportPipe()
|
||||
- PR_ImportTCPSocket()
|
||||
- PR_ImportUDPSocket()
|
||||
|
||||
- One can obtain the osfd in use by NSPR, either when the
|
||||
osfd was imported or because NSPR created the osfd itself via:
|
||||
|
||||
- PR_FileDesc2NativeHandle();
|
||||
|
||||
But note this function is not meant to be public in the NSPR
|
||||
API and is documented as being deprecated and carries an
|
||||
explicit warning against it's use.
|
||||
|
||||
Once NSPR gets a hold of an osfd it manipulates it in a manner
|
||||
as if it were the only owner of the osfd. Other native code
|
||||
(e.g. the CPython socket code) which operates on the fd may run
|
||||
afoul of NSPR belief it is the only code in the system operating
|
||||
on the fd. For example in CPython the non-blocking flag is
|
||||
directly set on the fd and non-blocking behavior is implemented
|
||||
by the OS. However, NSPR manages non-blocking behavior
|
||||
internally to the NSPR library eschewing direct OS support for
|
||||
non-blocking. Thus CPython and NSPR are in direct conflict over
|
||||
when and how non-blocking is set on an fd. Examples of this
|
||||
problem can be seen in the Python socket.makefile() operation
|
||||
which takes the fd belonging to a system socket, dups it, and
|
||||
calls fdopen() on the dup'ed fd to return a FILE stream (all
|
||||
Python file IO is based on file objects utilizing a FILE
|
||||
stream). However, the dup'ed fd does not share the same
|
||||
non-blocking flag, NSPR explicitly forces the flag off, Python
|
||||
wants to directly manipulate it. Dup'ed fd's share their flags
|
||||
thus if Python operates on the dup'ed fd returned by NSPR it's
|
||||
going to confuse NSPR. Likewise if one sets non-blocking via
|
||||
NSPR then Python won't honor the flag because Python is
|
||||
expecting the flag to be set on the fd, not in some other
|
||||
location (e.g. internal to NSPR).
|
||||
|
||||
- Python's socket implementation is a very thin layer over the
|
||||
Berkely socket API. There is very little abstraction, thus
|
||||
Python and Python program expect to manipulate sockets directly
|
||||
via their fd's.
|
||||
|
||||
- The error and exception model for Python sockets and SSL is an
|
||||
almost direct one-to-one mapping of the Posix and OpenSSL
|
||||
errors. But NSS uses NSPR errors, thus Python code which has
|
||||
exception handlers for sockets and SSL are expecting a complete
|
||||
different set of exceptions.
|
||||
|
||||
- Python's SSL implementation is a very thin layer over the
|
||||
OpenSSL API, there is little abstraction. Thus there is a
|
||||
sizeable body of Python code which expects the OpenSSL model for
|
||||
IO ready and has exception handlers based on OpenSSL.
|
||||
|
||||
|
||||
===
|
||||
FAQ
|
||||
===
|
||||
|
||||
To be added
|
||||
|
||||
"""
|
||||
115
mozilla/security/python/nss/src/py_nspr_common.h
Normal file
115
mozilla/security/python/nss/src/py_nspr_common.h
Normal file
@@ -0,0 +1,115 @@
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is a Python binding for Network Security Services (NSS).
|
||||
*
|
||||
* The Initial Developer of the Original Code is Red Hat, Inc.
|
||||
* (Author: John Dennis <jdennis@redhat.com>)
|
||||
*
|
||||
* Portions created by the Initial Developer are Copyright (C) 2008,2009
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
//#define DEBUG
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
#ifndef MAX
|
||||
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
|
||||
typedef int Py_ssize_t;
|
||||
#define PY_SSIZE_T_MAX INT_MAX
|
||||
#define PY_SSIZE_T_MIN INT_MIN
|
||||
#endif
|
||||
|
||||
#define AddIntConstant(c) if (PyModule_AddIntConstant(m, #c, c) < 0) return;
|
||||
|
||||
#ifdef DEBUG
|
||||
|
||||
#define TraceMessage(_msg) \
|
||||
{ \
|
||||
printf("%s\n", _msg); \
|
||||
}
|
||||
|
||||
#define TraceMethodEnter(_name, _obj) \
|
||||
{ \
|
||||
PyObject *repr = NULL; \
|
||||
char *repr_str = NULL; \
|
||||
\
|
||||
if (_obj) { \
|
||||
repr = _obj->ob_type->tp_repr((PyObject *)_obj); \
|
||||
repr_str = PyString_AsString(repr); \
|
||||
} \
|
||||
printf("%s: %s\n", _name, repr_str); \
|
||||
Py_XDECREF(repr); \
|
||||
}
|
||||
|
||||
#define TraceMethodLeave(_name, _obj) \
|
||||
{ \
|
||||
PyObject *repr = NULL; \
|
||||
char *repr_str = NULL; \
|
||||
\
|
||||
if (_obj) { \
|
||||
repr = _obj->ob_type->tp_repr((PyObject *)_obj); \
|
||||
repr_str = PyString_AsString(repr); \
|
||||
} \
|
||||
printf("%s: %s\n", _name, repr_str); \
|
||||
Py_XDECREF(repr); \
|
||||
}
|
||||
|
||||
#define TraceObjNewEnter(_name, _tp) \
|
||||
{ \
|
||||
PyTypeObject *tp = _tp; \
|
||||
if (tp != NULL) \
|
||||
printf("%s %s\n", _name, tp->tp_name); \
|
||||
else \
|
||||
printf("%s\n", _name); \
|
||||
}
|
||||
|
||||
|
||||
#define TraceObjNewLeave(_name, _obj) \
|
||||
{ \
|
||||
PyObject *repr = NULL; \
|
||||
\
|
||||
if ((repr = _obj->ob_type->tp_repr((PyObject *)_obj))) { \
|
||||
printf("%s: returns %s\n", _name, PyString_AsString(repr)); \
|
||||
Py_DECREF(repr); \
|
||||
} \
|
||||
}
|
||||
|
||||
#else
|
||||
#define TraceMessage(_msg)
|
||||
#define TraceMethodEnter(_name, _obj)
|
||||
#define TraceMethodLeave(_name, _obj)
|
||||
#define TraceObjNewEnter(_name, _tp)
|
||||
#define TraceObjNewLeave(_name, _obj)
|
||||
#endif
|
||||
295
mozilla/security/python/nss/src/py_nspr_error.c
Normal file
295
mozilla/security/python/nss/src/py_nspr_error.c
Normal file
@@ -0,0 +1,295 @@
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is a Python binding for Network Security Services (NSS).
|
||||
*
|
||||
* The Initial Developer of the Original Code is Red Hat, Inc.
|
||||
* (Author: John Dennis <jdennis@redhat.com>)
|
||||
*
|
||||
* Portions created by the Initial Developer are Copyright (C) 2008,2009
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "Python.h"
|
||||
#include "structmember.h"
|
||||
|
||||
#define NSPR_ERROR_MODULE
|
||||
#include "py_nspr_error.h"
|
||||
|
||||
|
||||
static PyObject *NSPR_Exception = NULL;
|
||||
|
||||
typedef struct {
|
||||
PRErrorCode num;
|
||||
const char *name;
|
||||
const char *string;
|
||||
} NSPRErrorDesc;
|
||||
|
||||
#include "nspr.h"
|
||||
#include "seccomon.h"
|
||||
|
||||
#define ER2(a,b) {a, #a, b},
|
||||
#define ER3(a,b,c) {a, #a, c},
|
||||
|
||||
#include "secerr.h"
|
||||
#include "sslerr.h"
|
||||
|
||||
NSPRErrorDesc nspr_errors[] = {
|
||||
#include "SSLerrs.h"
|
||||
#include "SECerrs.h"
|
||||
#include "NSPRerrs.h"
|
||||
};
|
||||
|
||||
static int
|
||||
cmp_error(const void *p1, const void *p2)
|
||||
{
|
||||
NSPRErrorDesc *e1 = (NSPRErrorDesc *) p1;
|
||||
NSPRErrorDesc *e2 = (NSPRErrorDesc *) p2;
|
||||
|
||||
if (e1->num < e2->num) return -1;
|
||||
if (e1->num > e2->num) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
const int nspr_error_count = sizeof(nspr_errors) / sizeof(NSPRErrorDesc);
|
||||
|
||||
static PRStatus
|
||||
init_nspr_errors(void) {
|
||||
int low = 0;
|
||||
int high = nspr_error_count - 1;
|
||||
int i;
|
||||
PRErrorCode err_num;
|
||||
int result = SECSuccess;
|
||||
|
||||
/* Make sure table is in ascending order. binary search depends on it. */
|
||||
|
||||
qsort((void*)nspr_errors, nspr_error_count, sizeof(NSPRErrorDesc), cmp_error);
|
||||
|
||||
PRErrorCode last_num = ((PRInt32)0x80000000);
|
||||
for (i = low; i <= high; ++i) {
|
||||
err_num = nspr_errors[i].num;
|
||||
if (err_num <= last_num) {
|
||||
result = SECFailure;
|
||||
fprintf(stderr,
|
||||
"sequence error in error strings at item %d\n"
|
||||
"error %d (%s)\n"
|
||||
"should come after \n"
|
||||
"error %d (%s)\n",
|
||||
i, last_num, nspr_errors[i-1].string,
|
||||
err_num, nspr_errors[i].string);
|
||||
}
|
||||
last_num = err_num;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static const NSPRErrorDesc *
|
||||
lookup_nspr_error(PRErrorCode num) {
|
||||
int low = 0;
|
||||
int high = nspr_error_count - 1;
|
||||
int i;
|
||||
PRErrorCode err_num;
|
||||
|
||||
/* Do binary search of table. */
|
||||
while (low + 1 < high) {
|
||||
i = (low + high) / 2;
|
||||
err_num = nspr_errors[i].num;
|
||||
if (num == err_num)
|
||||
return &nspr_errors[i];
|
||||
if (num < err_num)
|
||||
high = i;
|
||||
else
|
||||
low = i;
|
||||
}
|
||||
if (num == nspr_errors[low].num)
|
||||
return &nspr_errors[low];
|
||||
if (num == nspr_errors[high].num)
|
||||
return &nspr_errors[high];
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
set_nspr_error(const char *format, ...)
|
||||
{
|
||||
va_list vargs;
|
||||
PyObject *v;
|
||||
const NSPRErrorDesc *error_desc;
|
||||
char *errstr=NULL;
|
||||
PRErrorCode err;
|
||||
PyObject *detail = NULL;
|
||||
char buf[1024];
|
||||
|
||||
if (format) {
|
||||
#ifdef HAVE_STDARG_PROTOTYPES
|
||||
va_start(vargs, format);
|
||||
#else
|
||||
va_start(vargs);
|
||||
#endif
|
||||
detail = PyString_FromFormatV(format, vargs);
|
||||
va_end(vargs);
|
||||
}
|
||||
|
||||
err = PR_GetError();
|
||||
PR_GetErrorText(errstr);
|
||||
if (errstr == NULL) {
|
||||
if ((error_desc = lookup_nspr_error(err)) != NULL) {
|
||||
snprintf(buf, sizeof(buf), "(%s) %s", error_desc->name, error_desc->string);
|
||||
errstr = buf;
|
||||
} else {
|
||||
errstr = NULL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (detail) {
|
||||
v = Py_BuildValue("(isS)", err, errstr, detail);
|
||||
Py_DECREF(detail);
|
||||
} else {
|
||||
v = Py_BuildValue("(is)", err, errstr);
|
||||
}
|
||||
if (v != NULL) {
|
||||
PyErr_SetObject(NSPR_Exception, v);
|
||||
Py_DECREF(v);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(io_get_nspr_error_string_doc,
|
||||
"get_nspr_error_string(number) -> string\n\
|
||||
\n\
|
||||
Given an NSPR error number, returns it's string description\n\
|
||||
");
|
||||
|
||||
static PyObject *
|
||||
io_get_nspr_error_string(PyObject *self, PyObject *args)
|
||||
{
|
||||
int err_num;
|
||||
NSPRErrorDesc const *error_desc = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "i:get_nspr_error_string", &err_num)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((error_desc = lookup_nspr_error(err_num)) == NULL)
|
||||
Py_RETURN_NONE;
|
||||
|
||||
return PyString_FromString(error_desc->string);
|
||||
}
|
||||
|
||||
/* List of functions exported by this module. */
|
||||
static PyMethodDef
|
||||
module_methods[] = {
|
||||
{"get_nspr_error_string", io_get_nspr_error_string, METH_VARARGS, io_get_nspr_error_string_doc},
|
||||
{NULL, NULL} /* Sentinel */
|
||||
};
|
||||
|
||||
static PyObject *
|
||||
init_py_nspr_errors(PyObject *module)
|
||||
{
|
||||
NSPRErrorDesc *error_desc = NULL;
|
||||
PyObject *py_error_doc = NULL;
|
||||
PyObject *error_str = NULL;
|
||||
int i;
|
||||
|
||||
/* Load and intialize NSPR error descriptions */
|
||||
if (init_nspr_errors() != PR_SUCCESS)
|
||||
return NULL;
|
||||
|
||||
/* Create a python string to hold the modules error documentation */
|
||||
if ((py_error_doc = PyString_FromString("NSPR Error Constants:\n\n")) == NULL)
|
||||
return NULL;
|
||||
|
||||
/*
|
||||
* Iterate over all the NSPR errors, for each:
|
||||
* add it's doc string to the module doc
|
||||
* add it's numeric value as as a module constant
|
||||
*/
|
||||
for (i = 0, error_desc = &nspr_errors[0]; i < nspr_error_count; i++, error_desc++) {
|
||||
|
||||
if ((error_str = PyString_FromFormat("%s: %s\n\n", error_desc->name, error_desc->string)) == NULL) {
|
||||
Py_DECREF(py_error_doc);
|
||||
return NULL;
|
||||
}
|
||||
PyString_ConcatAndDel(&py_error_doc, error_str);
|
||||
|
||||
if (PyModule_AddIntConstant(module, error_desc->name, error_desc->num) < 0) {
|
||||
Py_DECREF(py_error_doc);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return py_error_doc;
|
||||
}
|
||||
|
||||
/* ============================== Module Exports ============================= */
|
||||
|
||||
static PyNSPR_ERROR_C_API_Type nspr_error_c_api =
|
||||
{
|
||||
NULL, /* nspr_exception */
|
||||
set_nspr_error, /* set_nspr_error */
|
||||
};
|
||||
|
||||
/* ============================== Module Construction ============================= */
|
||||
|
||||
PyDoc_STRVAR(module_doc,
|
||||
"This module defines the NSPR errors and provides functions to\n\
|
||||
manipulate them.\n\
|
||||
");
|
||||
|
||||
PyMODINIT_FUNC
|
||||
initerror(void)
|
||||
{
|
||||
PyObject *m;
|
||||
PyObject *py_error_doc = NULL;
|
||||
PyObject *py_module_doc = NULL;
|
||||
|
||||
if ((m = Py_InitModule3("error", module_methods, module_doc)) == NULL)
|
||||
return;
|
||||
|
||||
if ((py_error_doc = init_py_nspr_errors(m)) == NULL)
|
||||
return;
|
||||
|
||||
if ((py_module_doc = PyString_FromString(module_doc)) == NULL)
|
||||
return;
|
||||
|
||||
PyString_ConcatAndDel(&py_module_doc, py_error_doc);
|
||||
Py_INCREF(py_module_doc);
|
||||
PyModule_AddObject(m, "__doc__", py_module_doc);
|
||||
|
||||
/* exceptions */
|
||||
if ((NSPR_Exception = PyErr_NewException("nss.error.NSPRError", PyExc_EnvironmentError, NULL)) == NULL)
|
||||
return;
|
||||
Py_INCREF(NSPR_Exception);
|
||||
if (PyModule_AddObject(m, "NSPRError", NSPR_Exception) < 0)
|
||||
return;
|
||||
|
||||
/* Export C API */
|
||||
nspr_error_c_api.nspr_exception = NSPR_Exception;
|
||||
if (PyModule_AddObject(m, "_C_API", PyCObject_FromVoidPtr((void *)&nspr_error_c_api, NULL)) != 0)
|
||||
return;
|
||||
|
||||
}
|
||||
89
mozilla/security/python/nss/src/py_nspr_error.h
Normal file
89
mozilla/security/python/nss/src/py_nspr_error.h
Normal file
@@ -0,0 +1,89 @@
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is a Python binding for Network Security Services (NSS).
|
||||
*
|
||||
* The Initial Developer of the Original Code is Red Hat, Inc.
|
||||
* (Author: John Dennis <jdennis@redhat.com>)
|
||||
*
|
||||
* Portions created by the Initial Developer are Copyright (C) 2008,2009
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/* NSPR header files */
|
||||
#undef HAVE_LONG_LONG /* FIXME: both Python.h and nspr.h define HAVE_LONG_LONG */
|
||||
#include "nspr.h"
|
||||
#include "prerror.h"
|
||||
|
||||
typedef struct {
|
||||
PyObject *nspr_exception;
|
||||
PyObject *(*set_nspr_error)(const char *format, ...);
|
||||
} PyNSPR_ERROR_C_API_Type;
|
||||
|
||||
#ifdef NSPR_ERROR_MODULE
|
||||
|
||||
#else /* not NSPR_ERROR_MODULE */
|
||||
|
||||
static PyNSPR_ERROR_C_API_Type nspr_error_c_api;
|
||||
|
||||
#define set_nspr_error (*nspr_error_c_api.set_nspr_error)
|
||||
|
||||
static int
|
||||
import_nspr_error_c_api(void)
|
||||
{
|
||||
PyObject *module = NULL;
|
||||
PyObject *c_api_object = NULL;
|
||||
void *api = NULL;
|
||||
|
||||
if ((module = PyImport_ImportModule("nss.error")) == NULL)
|
||||
return -1;
|
||||
|
||||
if ((c_api_object = PyObject_GetAttrString(module, "_C_API")) == NULL) {
|
||||
Py_DECREF(module);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!(PyCObject_Check(c_api_object))) {
|
||||
Py_DECREF(c_api_object);
|
||||
Py_DECREF(module);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((api = PyCObject_AsVoidPtr(c_api_object)) == NULL) {
|
||||
Py_DECREF(c_api_object);
|
||||
Py_DECREF(module);
|
||||
return -1;
|
||||
}
|
||||
|
||||
memcpy(&nspr_error_c_api, api, sizeof(nspr_error_c_api));
|
||||
Py_DECREF(c_api_object);
|
||||
Py_DECREF(module);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* NSPR_ERROR_MODULE */
|
||||
2900
mozilla/security/python/nss/src/py_nspr_io.c
Normal file
2900
mozilla/security/python/nss/src/py_nspr_io.c
Normal file
File diff suppressed because it is too large
Load Diff
164
mozilla/security/python/nss/src/py_nspr_io.h
Normal file
164
mozilla/security/python/nss/src/py_nspr_io.h
Normal file
@@ -0,0 +1,164 @@
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is a Python binding for Network Security Services (NSS).
|
||||
*
|
||||
* The Initial Developer of the Original Code is Red Hat, Inc.
|
||||
* (Author: John Dennis <jdennis@redhat.com>)
|
||||
*
|
||||
* Portions created by the Initial Developer are Copyright (C) 2008,2009
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/* NSPR header files */
|
||||
#undef HAVE_LONG_LONG /* FIXME: both Python.h and nspr.h define HAVE_LONG_LONG */
|
||||
#include "nspr.h"
|
||||
#include "private/pprio.h"
|
||||
#include "prnetdb.h"
|
||||
|
||||
/* ========================================================================== */
|
||||
/* ============================= HostEntry Class ============================ */
|
||||
/* ========================================================================== */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
PRHostEnt entry;
|
||||
char buffer[PR_NETDB_BUF_SIZE]; /* this is where data pointed to in PRHostEnt is stored */
|
||||
} HostEntry;
|
||||
|
||||
#define PyHostEntry_Check(op) PyObject_TypeCheck(op, &HostEntryType)
|
||||
|
||||
/* ========================================================================== */
|
||||
/* =========================== NetworkAddress Class ========================= */
|
||||
/* ========================================================================== */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
PRNetAddr addr;
|
||||
PyObject *py_hostname;
|
||||
HostEntry *py_hostentry;
|
||||
} NetworkAddress;
|
||||
|
||||
#define PyNetworkAddress_Check(op) PyObject_TypeCheck(op, &NetworkAddressType)
|
||||
|
||||
/* ========================================================================== */
|
||||
/* ============================== Socket Class ============================== */
|
||||
/* ========================================================================== */
|
||||
|
||||
#define ALLOC_INCREMENT 128
|
||||
typedef struct {
|
||||
char *buf;
|
||||
long len;
|
||||
long alloc_len;
|
||||
} ReadAhead;
|
||||
|
||||
|
||||
#define INIT_READAHEAD(readahead) \
|
||||
{ \
|
||||
(readahead)->buf = NULL; \
|
||||
(readahead)->len = 0; \
|
||||
(readahead)->alloc_len = 0; \
|
||||
}
|
||||
|
||||
#define FREE_READAHEAD(readahead) \
|
||||
{ \
|
||||
if ((readahead)->buf) \
|
||||
PyMem_FREE((readahead)->buf); \
|
||||
INIT_READAHEAD(readahead); \
|
||||
}
|
||||
|
||||
#define SOCKET_HEAD \
|
||||
PyObject_HEAD; \
|
||||
PRFileDesc *pr_socket; \
|
||||
int family; \
|
||||
NetworkAddress *py_netaddr; \
|
||||
ReadAhead readahead;
|
||||
|
||||
|
||||
typedef struct {
|
||||
SOCKET_HEAD
|
||||
} Socket;
|
||||
|
||||
#define PySocket_Check(op) PyObject_TypeCheck(op, &SocketType)
|
||||
|
||||
typedef struct {
|
||||
PyTypeObject *network_address_type;
|
||||
PyTypeObject *host_entry_type;
|
||||
PyTypeObject *socket_type;
|
||||
void (*Socket_init_from_prfiledesc)(Socket *py_socket, PRFileDesc *pr_socket, int family);
|
||||
} PyNSPR_IO_C_API_Type;
|
||||
|
||||
#ifdef NSPR_IO_MODULE
|
||||
|
||||
static PyObject *
|
||||
HostEntry_new_from_prnetaddr(PRNetAddr *pr_netaddr);
|
||||
|
||||
#else /* not NSPR_IO_MODULE */
|
||||
|
||||
static PyNSPR_IO_C_API_Type nspr_io_c_api;
|
||||
|
||||
#define NetworkAddressType (*nspr_io_c_api.network_address_type)
|
||||
#define HostEntryType (*nspr_io_c_api.host_entry_type)
|
||||
#define SocketType (*nspr_io_c_api.socket_type)
|
||||
|
||||
#define Socket_init_from_prfiledesc (*nspr_io_c_api.Socket_init_from_prfiledesc)
|
||||
|
||||
static int
|
||||
import_nspr_io_c_api(void)
|
||||
{
|
||||
PyObject *module = NULL;
|
||||
PyObject *c_api_object = NULL;
|
||||
void *api = NULL;
|
||||
|
||||
if ((module = PyImport_ImportModule("nss.io")) == NULL)
|
||||
return -1;
|
||||
|
||||
if ((c_api_object = PyObject_GetAttrString(module, "_C_API")) == NULL) {
|
||||
Py_DECREF(module);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!(PyCObject_Check(c_api_object))) {
|
||||
Py_DECREF(c_api_object);
|
||||
Py_DECREF(module);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((api = PyCObject_AsVoidPtr(c_api_object)) == NULL) {
|
||||
Py_DECREF(c_api_object);
|
||||
Py_DECREF(module);
|
||||
return -1;
|
||||
}
|
||||
|
||||
memcpy(&nspr_io_c_api, api, sizeof(nspr_io_c_api));
|
||||
Py_DECREF(c_api_object);
|
||||
Py_DECREF(module);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* NSPR_IO_MODULE */
|
||||
4803
mozilla/security/python/nss/src/py_nss.c
Normal file
4803
mozilla/security/python/nss/src/py_nss.c
Normal file
File diff suppressed because it is too large
Load Diff
267
mozilla/security/python/nss/src/py_nss.h
Normal file
267
mozilla/security/python/nss/src/py_nss.h
Normal file
@@ -0,0 +1,267 @@
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is a Python binding for Network Security Services (NSS).
|
||||
*
|
||||
* The Initial Developer of the Original Code is Red Hat, Inc.
|
||||
* (Author: John Dennis <jdennis@redhat.com>)
|
||||
*
|
||||
* Portions created by the Initial Developer are Copyright (C) 2008,2009
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
// FIXME: some of these class types have items in them with arenas, but we can't hold a reference
|
||||
// to an arena, so check to make sure we copy the items out and don't store the
|
||||
// the item with the arena in it.
|
||||
|
||||
/* NSPR header files */
|
||||
#undef HAVE_LONG_LONG /* FIXME: both Python.h and nspr.h define HAVE_LONG_LONG */
|
||||
#include "nspr.h"
|
||||
#include "cert.h"
|
||||
#include "nss.h"
|
||||
#include "ssl.h"
|
||||
#include "sslt.h"
|
||||
#include "key.h"
|
||||
#include "pk11pub.h"
|
||||
|
||||
/* ========================================================================== */
|
||||
/* =============================== PK11Slot Class =========================== */
|
||||
/* ========================================================================== */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
PK11SlotInfo *slot;
|
||||
} PK11Slot;
|
||||
|
||||
/* ========================================================================== */
|
||||
/* ================================ CertDB Class ============================ */
|
||||
/* ========================================================================== */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
CERTCertDBHandle *handle;
|
||||
} CertDB;
|
||||
|
||||
|
||||
/* ========================================================================== */
|
||||
/* ============================ Certificate Class =========================== */
|
||||
/* ========================================================================== */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
CERTCertificate *cert;
|
||||
PyObject *py_subject_public_key_info;
|
||||
} Certificate;
|
||||
|
||||
|
||||
/* ========================================================================== */
|
||||
/* ============================= PrivateKey Class =========================== */
|
||||
/* ========================================================================== */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
SECKEYPrivateKey *private_key;
|
||||
} PrivateKey;
|
||||
|
||||
/* ========================================================================== */
|
||||
/* =============================== SecItem Class ============================ */
|
||||
/* ========================================================================== */
|
||||
|
||||
typedef enum SECItemKindEnum {
|
||||
SECITEM_unknown,
|
||||
SECITEM_dist_name,
|
||||
SECITEM_session_id,
|
||||
SECITEM_signed_data,
|
||||
SECITEM_signature,
|
||||
SECITEM_algorithm,
|
||||
} SECItemKind;
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
SECItem item;
|
||||
SECItemKind kind;
|
||||
} SecItem;
|
||||
|
||||
/* ========================================================================== */
|
||||
/* ============================ RSAPublicKey Class ========================== */
|
||||
/* ========================================================================== */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
PyObject *py_modulus;
|
||||
PyObject *py_exponent;
|
||||
} RSAPublicKey;
|
||||
|
||||
/* ========================================================================== */
|
||||
/* ============================ DSAPublicKey Class ========================== */
|
||||
/* ========================================================================== */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
PyObject *py_pqg_params;
|
||||
PyObject *py_public_value;
|
||||
} DSAPublicKey;
|
||||
|
||||
/* ========================================================================== */
|
||||
/* ============================ KEYPQGParams Class ========================== */
|
||||
/* ========================================================================== */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
PyObject *py_prime;
|
||||
PyObject *py_subprime;
|
||||
PyObject *py_base;
|
||||
} KEYPQGParams;
|
||||
|
||||
/* ========================================================================== */
|
||||
/* ======================== SignatureAlgorithm Class ======================== */
|
||||
/* ========================================================================== */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
SECAlgorithmID id;
|
||||
PyObject *py_id;
|
||||
PyObject *py_parameters;
|
||||
} SignatureAlgorithm;
|
||||
|
||||
/* ========================================================================== */
|
||||
/* ============================= SignedData Class =========================== */
|
||||
/* ========================================================================== */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
PRArenaPool *arena;
|
||||
CERTSignedData signed_data;
|
||||
PyObject *py_data;
|
||||
PyObject *py_algorithm;
|
||||
PyObject *py_signature;
|
||||
} SignedData;
|
||||
|
||||
/* ========================================================================== */
|
||||
/* ============================= PublicKey Class =========================== */
|
||||
/* ========================================================================== */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
SECKEYPublicKey *pk;
|
||||
PyObject *py_pk11slot;
|
||||
PyObject *py_rsa_key;
|
||||
PyObject *py_dsa_key;
|
||||
} PublicKey;
|
||||
|
||||
/* ========================================================================== */
|
||||
/* ======================== SubjectPublicKeyInfo Class ====================== */
|
||||
/* ========================================================================== */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
PRArenaPool *arena;
|
||||
CERTSubjectPublicKeyInfo spki;
|
||||
PyObject *py_algorithm;
|
||||
PyObject *py_public_key;
|
||||
} SubjectPublicKeyInfo;
|
||||
|
||||
typedef struct {
|
||||
PyTypeObject *pk11slot_type;
|
||||
PyTypeObject *certdb_type;
|
||||
PyTypeObject *certificate_type;
|
||||
PyTypeObject *private_key_type;
|
||||
PyTypeObject *sec_item_type;
|
||||
PyObject *(*Certificate_new_from_cert)(CERTCertificate *cert);
|
||||
PyObject *(*PrivateKey_new_from_private_key)(SECKEYPrivateKey *private_key);
|
||||
PyObject *(*SecItem_new_from_sec_item)(SECItem *item, SECItemKind type);
|
||||
PyObject *(*cert_distnames_new_from_CERTDistNames)(CERTDistNames *names);
|
||||
CERTDistNames *(*cert_distnames_as_CERTDistNames)(PyObject *py_distnames);
|
||||
} PyNSPR_NSS_C_API_Type;
|
||||
|
||||
#ifdef NSPR_NSS_MODULE
|
||||
|
||||
#define PyPK11Slot_Check(op) PyObject_TypeCheck(op, &PK11SlotType)
|
||||
#define PyCertDB_Check(op) PyObject_TypeCheck(op, &CertDBType)
|
||||
#define PyCertificate_Check(op) PyObject_TypeCheck(op, &CertificateType)
|
||||
#define PyPrivateKey_Check(op) PyObject_TypeCheck(op, &PrivateKeyType)
|
||||
#define PySecItem_Check(op) PyObject_TypeCheck(op, &SecItemType)
|
||||
|
||||
PyObject *
|
||||
PK11Slot_new_from_slotinfo(PK11SlotInfo *slot);
|
||||
|
||||
#else /* not NSPR_NSS_MODULE */
|
||||
|
||||
#define CertDBType (*nspr_nss_c_api.certdb_type)
|
||||
#define CertificateType (*nspr_nss_c_api.certificate_type)
|
||||
#define PrivateKeyType (*nspr_nss_c_api.private_key_type)
|
||||
#define SecItemType (*nspr_nss_c_api.sec_item_type)
|
||||
|
||||
#define PyPK11Slot_Check(op) PyObject_TypeCheck(op, nspr_nss_c_api.pk11slot_type)
|
||||
#define PyCertDB_Check(op) PyObject_TypeCheck(op, nspr_nss_c_api.certdb_type)
|
||||
#define PyCertificate_Check(op) PyObject_TypeCheck(op, nspr_nss_c_api.certificate_type)
|
||||
#define PyPrivateKey_Check(op) PyObject_TypeCheck(op, nspr_nss_c_api.private_key_type)
|
||||
#define PySecItem_Check(op) PyObject_TypeCheck(op, nspr_nss_c_api.sec_item_type)
|
||||
|
||||
static PyNSPR_NSS_C_API_Type nspr_nss_c_api;
|
||||
|
||||
#define Certificate_new_from_cert (*nspr_nss_c_api.Certificate_new_from_cert)
|
||||
#define PrivateKey_new_from_private_key (*nspr_nss_c_api.PrivateKey_new_from_private_key)
|
||||
#define SecItem_new_from_sec_item (*nspr_nss_c_api.SecItem_new_from_sec_item)
|
||||
#define cert_distnames_new_from_CERTDistNames (*nspr_nss_c_api.cert_distnames_new_from_CERTDistNames)
|
||||
#define cert_distnames_as_CERTDistNames (*nspr_nss_c_api.cert_distnames_as_CERTDistNames)
|
||||
|
||||
static int
|
||||
import_nspr_nss_c_api(void)
|
||||
{
|
||||
PyObject *module = NULL;
|
||||
PyObject *c_api_object = NULL;
|
||||
void *api = NULL;
|
||||
|
||||
if ((module = PyImport_ImportModule("nss.nss")) == NULL)
|
||||
return -1;
|
||||
|
||||
if ((c_api_object = PyObject_GetAttrString(module, "_C_API")) == NULL) {
|
||||
Py_DECREF(module);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!(PyCObject_Check(c_api_object))) {
|
||||
Py_DECREF(c_api_object);
|
||||
Py_DECREF(module);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((api = PyCObject_AsVoidPtr(c_api_object)) == NULL) {
|
||||
Py_DECREF(c_api_object);
|
||||
Py_DECREF(module);
|
||||
return -1;
|
||||
}
|
||||
|
||||
memcpy(&nspr_nss_c_api, api, sizeof(nspr_nss_c_api));
|
||||
Py_DECREF(c_api_object);
|
||||
Py_DECREF(module);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* NSPR_NSS_MODULE */
|
||||
2349
mozilla/security/python/nss/src/py_ssl.c
Normal file
2349
mozilla/security/python/nss/src/py_ssl.c
Normal file
File diff suppressed because it is too large
Load Diff
55
mozilla/security/python/nss/src/py_ssl.h
Normal file
55
mozilla/security/python/nss/src/py_ssl.h
Normal file
@@ -0,0 +1,55 @@
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is a Python binding for Network Security Services (NSS).
|
||||
*
|
||||
* The Initial Developer of the Original Code is Red Hat, Inc.
|
||||
* (Author: John Dennis <jdennis@redhat.com>)
|
||||
*
|
||||
* Portions created by the Initial Developer are Copyright (C) 2008,2009
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#undef HAVE_LONG_LONG /* FIXME: both Python.h and nspr.h define HAVE_LONG_LONG */
|
||||
#include "nss.h"
|
||||
#include "ssl.h"
|
||||
|
||||
typedef struct {
|
||||
SOCKET_HEAD;
|
||||
PyObject *auth_certificate_callback;
|
||||
PyObject *auth_certificate_callback_data;
|
||||
PyObject *pk11_pin_args;
|
||||
PyObject *handshake_callback;
|
||||
PyObject *handshake_callback_data;
|
||||
PyObject *client_auth_data_callback;
|
||||
PyObject *client_auth_data_callback_data;
|
||||
} SSLSocket;
|
||||
|
||||
#define PySSLSocket_Check(op) PyObject_TypeCheck(op, &SSLSocketType)
|
||||
extern PyTypeObject SSLSocketType;
|
||||
|
||||
Reference in New Issue
Block a user