summaryrefslogtreecommitdiffstats
path: root/private/lsa/crypt/engine/rsa.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/lsa/crypt/engine/rsa.h')
-rw-r--r--private/lsa/crypt/engine/rsa.h272
1 files changed, 272 insertions, 0 deletions
diff --git a/private/lsa/crypt/engine/rsa.h b/private/lsa/crypt/engine/rsa.h
new file mode 100644
index 000000000..9b69ca4b2
--- /dev/null
+++ b/private/lsa/crypt/engine/rsa.h
@@ -0,0 +1,272 @@
+/* rsa.h
+ *
+ * RSA library functions.
+ *
+ * Copyright (C) RSA Data Security, Inc. created 1990. This is an
+ * unpublished work protected as such under copyright law. This work
+ * contains proprietary, confidential, and trade secret information of
+ * RSA Data Security, Inc. Use, disclosure or reproduction without the
+ * express written authorization of RSA Data Security, Inc. is
+ * prohibited.
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define RSA1 ((DWORD)'R'+((DWORD)'S'<<8)+((DWORD)'A'<<16)+((DWORD)'1'<<24))
+#define RSA2 ((DWORD)'R'+((DWORD)'S'<<8)+((DWORD)'A'<<16)+((DWORD)'2'<<24))
+
+// Key header structures.
+//
+// These structs define the fixed data at the beginning of an RSA key.
+// They are followed by a variable length of data, sized by the stlen
+// field.
+
+typedef struct {
+ DWORD magic; /* Should always be RSA1 */
+ DWORD keylen; // size of modulus buffer
+ DWORD bitlen; // # of bits in modulus
+ DWORD datalen; // max number of bytes to be encoded
+ DWORD pubexp; //public exponent
+} BSAFE_PUB_KEY, FAR *LPBSAFE_PUB_KEY;
+
+typedef struct {
+ DWORD magic; /* Should always be RSA2 */
+ DWORD keylen; // size of modulus buffer
+ DWORD bitlen; // bit size of key
+ DWORD datalen; // max number of bytes to be encoded
+ DWORD pubexp; // public exponent
+} BSAFE_PRV_KEY, FAR *LPBSAFE_PRV_KEY;
+
+typedef struct {
+ BYTE *modulus;
+ BYTE *prvexp;
+ BYTE *prime1;
+ BYTE *prime2;
+ BYTE *exp1;
+ BYTE *exp2;
+ BYTE *coef;
+ BYTE *invmod;
+ BYTE *invpr1;
+ BYTE *invpr2;
+} BSAFE_KEY_PARTS, FAR *LPBSAFE_KEY_PARTS;
+
+typedef const BYTE far *cLPBYTE; // const LPBYTE resolves wrong
+
+/* BSafeEncPublic
+ *
+ * BSafeEncPublic(key, part_in, part_out)
+ *
+ * RSA encrypt a buffer of size key->keylen, filled with data of size
+ * key->datalen with the public key pointed to by key, returning the
+ * encrypted data in part_out.
+ *
+ * Parameters
+ *
+ * LPBSAFE_PUB_KEY key - points to a public key in BSAFE_KEY
+ * format.
+ *
+ * LPBYTE part_in - points to a BYTE array of size key->keylen
+ * holding the data to be encrypted. The
+ * data in the buffer should be no larger
+ * than key->datalen. All other bytes should
+ * be zero.
+ *
+ * LPBYTE part_out - points to a BYTE array of size keylen
+ * to receive the encrypted data.
+ *
+ * Returns
+ *
+ * TRUE - encryption succeeded.
+ * FALSE - encryption failed.
+ *
+ */
+
+BOOL BSafeEncPublic(const LPBSAFE_PUB_KEY key,
+ cLPBYTE part_in,
+ LPBYTE part_out);
+
+
+/* BSafeDecPrivate
+ *
+ * BSafeDecPrivate(key, part_in, part_out)
+ *
+ * RSA decrypt a buffer of size keylen, containing key->datalen bytes
+ * of data with the private key pointed to by key, returning the
+ * decrypted data in part_out.
+ *
+ * Parameters
+ *
+ * LPBSAFE_PRV_KEY key - points to a private key in BSAFE_KEY
+ * format.
+ *
+ * LPBYTE part_in - points to a BYTE array of size key->keylen
+ * holding the data to be decrypted. The data
+ * in the buffer should be no longer than
+ * key->datalen. All other bytes should be zero.
+ *
+ * LPBYTE part_out - points to a BYTE array of size GRAINSIZE
+ * to receive the decrypted data.
+ *
+ * Returns
+ *
+ * TRUE - decryption succeeded.
+ * FALSE - decryption failed.
+ *
+ */
+
+BOOL BSafeDecPrivate(const LPBSAFE_PRV_KEY key,
+ cLPBYTE part_in,
+ LPBYTE part_out);
+
+/* BSafeMakeKeyPair
+ *
+ * BSafeMakeKeyPair(public_key, private_key, bits)
+ *
+ * Generate an RSA key pair.
+ *
+ * Parameters
+ *
+ * LPBSAFE_PUB_KEY public_key - points to the memory to recieve
+ * the public key. This pointer must
+ * point to at least the number of bytes
+ * specified as the public key size by
+ * BSafeComputeKeySizes.
+ *
+ * LPBSAFE_PRV_KEY private_key - points to the memory to recieve
+ * the private key. This pointer must
+ * point to at least the number of bytes
+ * specified as the private key size
+ * by BSafeComputeKeySizes.
+ *
+ * DWORD bits - length of the requested key in bits.
+ * This value must be even and greater than 63
+ *
+ * Returns
+ *
+ * TRUE - keys were successfully generated
+ * FALSE - not enough memory to generate keys
+ *
+ */
+
+BOOL BSafeMakeKeyPair(LPBSAFE_PUB_KEY public_key,
+ LPBSAFE_PRV_KEY private_key,
+ DWORD bits);
+
+/* BSafeFreePubKey
+ *
+ * BSafeFreePubKey(public_key)
+ *
+ * Free the data associated with a public key
+ *
+ * Parameters
+ *
+ * LPBSAFE_PUB_KEY public_key - points to a BSAFE_PUB_KEY
+ * structure to free.
+ *
+ * Returns
+ *
+ * nothing
+ *
+ */
+
+void BSafeFreePubKey(LPBSAFE_PUB_KEY public_key);
+
+/* BSafeFreePrvKey
+ *
+ * BSafeFreePrvKey(public_key)
+ *
+ * Free the data associated with a private key
+ *
+ * Parameters
+ *
+ * LPBSAFE_PRV_KEY private_key - points to a BSAFE_PRV_KEY
+ * structure to free.
+ *
+ * Returns
+ *
+ * nothing
+ *
+ */
+
+void BSafeFreePrvKey(LPBSAFE_PRV_KEY private_key);
+
+
+/* BSafeComputeKeySizes
+ *
+ * BSafeComputeKeySizes( LPDWORD PubKeySize,
+ * LPDWORD PrivKeySize,
+ * LPDWORD bits )
+ *
+ * Computes the required memory to hold a public and private key of
+ * a specified number of bits.
+ *
+ * Parameters:
+ *
+ * LPDWORD PubKeySize - pointer to DWORD to return the public
+ * key size, in bytes.
+ *
+ * LPDWORD PrivKeySize - pointer to DWORD to return the private
+ * key size, in bytes.
+ *
+ * LPDWORD bits - pointer to DWORD specifying number of bits
+ * in the RSA modulus.
+ *
+ * Returns:
+ *
+ * TRUE if *bits is a valid RSA modulus size.
+ * FALSE if *bits is an invalid RSA modulus size.
+ *
+ */
+
+BOOL BSafeComputeKeySizes(LPDWORD PublicKeySize,
+ LPDWORD PrivateKeySize,
+ LPDWORD bits);
+
+/* BSafeGetPrvKeyParts
+ *
+ * BOOL BSafeGetPrvKeyParts( LPBSAFE_PRV_KEY key,
+ * LPBSAFE_KEY_PARTS parts)
+ *
+ * Returns pointers to the parts of a private key, and the length of
+ * the modulus in bytes.
+ *
+ * Parameters:
+ *
+ * LPBSAFE_PRV_KEY key - the key to disassemble
+ * LPBSAFE_KEY_PARTS parts - the structure to fill in
+ *
+ * Returns -
+ * FALSE if the key is not valid.
+ */
+
+BOOL BSafeGetPrvKeyParts(LPBSAFE_PRV_KEY key,
+ LPBSAFE_KEY_PARTS parts);
+
+
+/* BSafeGetPubKeyModulus
+ *
+ * BYTE *BSafeGetPubKeyModulus(LPBSAFE_PUB_KEY key)
+ *
+ * Returns pointer to the modulus of a public key
+ *
+ * Parameters:
+ *
+ * LPBSAFE_PUB_KEY key - the key to disassemble
+ *
+ * Returns -
+ *
+ * Pointer to the parts, VOID on error.
+ * Fails if the key is not valid.
+ */
+
+BYTE *BSafeGetPubKeyModulus(LPBSAFE_PUB_KEY key);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+