143 lines
5.7 KiB
TypeScript
143 lines
5.7 KiB
TypeScript
|
import { RSAKey } from "./lib/jsbn/rsa";
|
||
|
/**
|
||
|
* Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object.
|
||
|
* This object is just a decorator for parsing the key parameter
|
||
|
* @param {string|Object} key - The key in string format, or an object containing
|
||
|
* the parameters needed to build a RSAKey object.
|
||
|
* @constructor
|
||
|
*/
|
||
|
export declare class JSEncryptRSAKey extends RSAKey {
|
||
|
constructor(key?: string);
|
||
|
/**
|
||
|
* Method to parse a pem encoded string containing both a public or private key.
|
||
|
* The method will translate the pem encoded string in a der encoded string and
|
||
|
* will parse private key and public key parameters. This method accepts public key
|
||
|
* in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).
|
||
|
*
|
||
|
* @todo Check how many rsa formats use the same format of pkcs #1.
|
||
|
*
|
||
|
* The format is defined as:
|
||
|
* PublicKeyInfo ::= SEQUENCE {
|
||
|
* algorithm AlgorithmIdentifier,
|
||
|
* PublicKey BIT STRING
|
||
|
* }
|
||
|
* Where AlgorithmIdentifier is:
|
||
|
* AlgorithmIdentifier ::= SEQUENCE {
|
||
|
* algorithm OBJECT IDENTIFIER, the OID of the enc algorithm
|
||
|
* parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)
|
||
|
* }
|
||
|
* and PublicKey is a SEQUENCE encapsulated in a BIT STRING
|
||
|
* RSAPublicKey ::= SEQUENCE {
|
||
|
* modulus INTEGER, -- n
|
||
|
* publicExponent INTEGER -- e
|
||
|
* }
|
||
|
* it's possible to examine the structure of the keys obtained from openssl using
|
||
|
* an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/
|
||
|
* @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer
|
||
|
* @private
|
||
|
*/
|
||
|
parseKey(pem: string): boolean;
|
||
|
/**
|
||
|
* Translate rsa parameters in a hex encoded string representing the rsa key.
|
||
|
*
|
||
|
* The translation follow the ASN.1 notation :
|
||
|
* RSAPrivateKey ::= SEQUENCE {
|
||
|
* version Version,
|
||
|
* modulus INTEGER, -- n
|
||
|
* publicExponent INTEGER, -- e
|
||
|
* privateExponent INTEGER, -- d
|
||
|
* prime1 INTEGER, -- p
|
||
|
* prime2 INTEGER, -- q
|
||
|
* exponent1 INTEGER, -- d mod (p1)
|
||
|
* exponent2 INTEGER, -- d mod (q-1)
|
||
|
* coefficient INTEGER, -- (inverse of q) mod p
|
||
|
* }
|
||
|
* @returns {string} DER Encoded String representing the rsa private key
|
||
|
* @private
|
||
|
*/
|
||
|
getPrivateBaseKey(): string;
|
||
|
/**
|
||
|
* base64 (pem) encoded version of the DER encoded representation
|
||
|
* @returns {string} pem encoded representation without header and footer
|
||
|
* @public
|
||
|
*/
|
||
|
getPrivateBaseKeyB64(): string;
|
||
|
/**
|
||
|
* Translate rsa parameters in a hex encoded string representing the rsa public key.
|
||
|
* The representation follow the ASN.1 notation :
|
||
|
* PublicKeyInfo ::= SEQUENCE {
|
||
|
* algorithm AlgorithmIdentifier,
|
||
|
* PublicKey BIT STRING
|
||
|
* }
|
||
|
* Where AlgorithmIdentifier is:
|
||
|
* AlgorithmIdentifier ::= SEQUENCE {
|
||
|
* algorithm OBJECT IDENTIFIER, the OID of the enc algorithm
|
||
|
* parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)
|
||
|
* }
|
||
|
* and PublicKey is a SEQUENCE encapsulated in a BIT STRING
|
||
|
* RSAPublicKey ::= SEQUENCE {
|
||
|
* modulus INTEGER, -- n
|
||
|
* publicExponent INTEGER -- e
|
||
|
* }
|
||
|
* @returns {string} DER Encoded String representing the rsa public key
|
||
|
* @private
|
||
|
*/
|
||
|
getPublicBaseKey(): string;
|
||
|
/**
|
||
|
* base64 (pem) encoded version of the DER encoded representation
|
||
|
* @returns {string} pem encoded representation without header and footer
|
||
|
* @public
|
||
|
*/
|
||
|
getPublicBaseKeyB64(): string;
|
||
|
/**
|
||
|
* wrap the string in block of width chars. The default value for rsa keys is 64
|
||
|
* characters.
|
||
|
* @param {string} str the pem encoded string without header and footer
|
||
|
* @param {Number} [width=64] - the length the string has to be wrapped at
|
||
|
* @returns {string}
|
||
|
* @private
|
||
|
*/
|
||
|
static wordwrap(str: string, width?: number): string;
|
||
|
/**
|
||
|
* Retrieve the pem encoded private key
|
||
|
* @returns {string} the pem encoded private key with header/footer
|
||
|
* @public
|
||
|
*/
|
||
|
getPrivateKey(): string;
|
||
|
/**
|
||
|
* Retrieve the pem encoded public key
|
||
|
* @returns {string} the pem encoded public key with header/footer
|
||
|
* @public
|
||
|
*/
|
||
|
getPublicKey(): string;
|
||
|
/**
|
||
|
* Check if the object contains the necessary parameters to populate the rsa modulus
|
||
|
* and public exponent parameters.
|
||
|
* @param {Object} [obj={}] - An object that may contain the two public key
|
||
|
* parameters
|
||
|
* @returns {boolean} true if the object contains both the modulus and the public exponent
|
||
|
* properties (n and e)
|
||
|
* @todo check for types of n and e. N should be a parseable bigInt object, E should
|
||
|
* be a parseable integer number
|
||
|
* @private
|
||
|
*/
|
||
|
static hasPublicKeyProperty(obj: object): boolean;
|
||
|
/**
|
||
|
* Check if the object contains ALL the parameters of an RSA key.
|
||
|
* @param {Object} [obj={}] - An object that may contain nine rsa key
|
||
|
* parameters
|
||
|
* @returns {boolean} true if the object contains all the parameters needed
|
||
|
* @todo check for types of the parameters all the parameters but the public exponent
|
||
|
* should be parseable bigint objects, the public exponent should be a parseable integer number
|
||
|
* @private
|
||
|
*/
|
||
|
static hasPrivateKeyProperty(obj: object): boolean;
|
||
|
/**
|
||
|
* Parse the properties of obj in the current rsa object. Obj should AT LEAST
|
||
|
* include the modulus and public exponent (n, e) parameters.
|
||
|
* @param {Object} obj - the object containing rsa parameters
|
||
|
* @private
|
||
|
*/
|
||
|
parsePropertiesFrom(obj: any): void;
|
||
|
}
|