# Class: SecretKeyPacket

## SecretKeyPacket(dateopt, configopt)

A Secret-Key packet contains all the information that is found in a Public-Key packet, including the public-key material, but also includes the secret-key material after all the public-key fields.

## Constructor

#### new SecretKeyPacket(dateopt, configopt)

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`date` | Date | <optional> | Creation date
`config` | Object | <optional> | Full configuration, defaults to openpgp.config

Source:
  - packet/secret_key.js, line 33

### Extends

- PublicKeyPacket

### Members

#### aead :enums.aead

AEAD algorithm to encrypt the key with (if AEAD protection is enabled)

##### Type:

- enums.aead

Source:
  - packet/secret_key.js, line 71

#### algorithm :enums.publicKey

Public key algorithm.

##### Type:

- enums.publicKey

Overrides:
  - PublicKeyPacket#algorithm
Source:
  - packet/public_key.js, line 60

#### created :Date

Key creation date.

##### Type:

- Date

Overrides:
  - PublicKeyPacket#created
Source:
  - packet/public_key.js, line 55

#### expirationTimeV3 :Integer

Time until expiration in days (V3 only)

##### Type:

- Integer

Overrides:
  - PublicKeyPacket#expirationTimeV3
Source:
  - packet/public_key.js, line 70

#### fingerprint :Uint8Array

Fingerprint bytes

##### Type:

- Uint8Array

Overrides:
  - PublicKeyPacket#fingerprint
Source:
  - packet/public_key.js, line 75

#### isEncrypted

Indicates whether secret-key data is encrypted. `this.isEncrypted === false` means data is available in decrypted form.

Source:
  - packet/secret_key.js, line 51

#### keyID :module:type/keyid~KeyID

KeyID

##### Type:

- module:type/keyid~KeyID

Overrides:
  - PublicKeyPacket#keyID
Source:
  - packet/public_key.js, line 80

#### keyMaterial

Secret-key data

Source:
  - packet/secret_key.js, line 47

#### privateParams :Object

Decrypted private parameters, referenced by name

##### Type:

- Object

Source:
  - packet/secret_key.js, line 85

#### publicParams :Object

Algorithm specific public params

##### Type:

- Object

Overrides:
  - PublicKeyPacket#publicParams
Source:
  - packet/public_key.js, line 65

#### readPublicKey

Alias of read()

Overrides:
  - PublicKeyPacket#readPublicKey
Source:
  - packet/public_key.js, line 284
See:
  - PublicKeyPacket#read

#### s2k :type/s2k

S2K object

##### Type:

- type/s2k

Source:
  - packet/secret_key.js, line 61

#### s2kUsage :enums.symmetric

S2K usage

##### Type:

- enums.symmetric

Source:
  - packet/secret_key.js, line 56

#### symmetric :enums.symmetric

Symmetric algorithm to encrypt the key with

##### Type:

- enums.symmetric

Source:
  - packet/secret_key.js, line 66

#### version :Integer

Packet version

##### Type:

- Integer

Overrides:
  - PublicKeyPacket#version
Source:
  - packet/public_key.js, line 50

#### writePublicKey

Alias of write()

Overrides:
  - PublicKeyPacket#writePublicKey
Source:
  - packet/public_key.js, line 290
See:
  - PublicKeyPacket#write

### Methods

#### clearPrivateParams()

Clear private key parameters

Source:
  - packet/secret_key.js, line 544

#### (async) computeFingerprint()

Computes and set the fingerprint of the key

Overrides:
  - PublicKeyPacket#computeFingerprint
Source:
  - packet/public_key.js, line 226

#### (async) computeFingerprintAndKeyID()

Computes and set the key ID and fingerprint of the key

Overrides:
  - PublicKeyPacket#computeFingerprintAndKeyID
Source:
  - packet/public_key.js, line 210

#### (async) decrypt(passphrase)

Decrypts the private key params which are needed to use the key. Successful decryption does not imply key integrity, call validate() to confirm that. SecretKeyPacket.isDecrypted should be false, as otherwise calls to this function will throw an error.

##### Parameters:

Name | Type | Description
--- | --- | ---
`passphrase` | String | The passphrase for this private key as string

Source:
  - packet/secret_key.js, line 431

##### Throws:

if the key is already decrypted, or if decryption was not successful

Type
  Error

#### (async) encrypt(passphrase, configopt)

Encrypt the payload. By default, we use aes256 and iterated, salted string to key specifier. If the key is in a decrypted state (isEncrypted === false) and the passphrase is empty or undefined, the key will be set as not encrypted. This can be used to remove passphrase protection after calling decrypt().

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`passphrase` | String |  |
`config` | Object | <optional> | Full configuration, defaults to openpgp.config

Source:
  - packet/secret_key.js, line 373

##### Throws:

if encryption was not successful

Type
  Error

#### getAlgorithmInfo() → {Object}

Returns algorithm information

Overrides:
  - PublicKeyPacket#getAlgorithmInfo
Source:
  - packet/public_key.js, line 266

##### Returns:

An object of the form {algorithm: String, bits:int, curve:String}.

Type
  Object

#### getCreationTime() → {Date}

Returns the creation time of the key

Overrides:
  - PublicKeyPacket#getCreationTime
Source:
  - packet/public_key.js, line 194

##### Returns:

Type
  Date

#### getFingerprint() → {String}

Calculates and returns the fingerprint of the key, as a string

Overrides:
  - PublicKeyPacket#getFingerprint
Source:
  - packet/public_key.js, line 250

##### Returns:

A string containing the fingerprint in lowercase hex

Type
  String

#### getFingerprintBytes() → {Uint8Array}

Returns the fingerprint of the key, as an array of bytes

Overrides:
  - PublicKeyPacket#getFingerprintBytes
Source:
  - packet/public_key.js, line 242

##### Returns:

A Uint8Array containing the fingerprint

Type
  Uint8Array

#### getKeyID() → {module:type/keyid~KeyID}

Return the key ID of the key

Overrides:
  - PublicKeyPacket#getKeyID
Source:
  - packet/public_key.js, line 202

##### Returns:

The 8-byte key ID

Type
  module:type/keyid~KeyID

#### hasSameFingerprintAs() → {Boolean}

Calculates whether two keys have the same fingerprint without actually calculating the fingerprint

Overrides:
  - PublicKeyPacket#hasSameFingerprintAs
Source:
  - packet/public_key.js, line 258

##### Returns:

Whether the two keys have the same version and public key data.

Type
  Boolean

#### isDecrypted() → {Boolean|null}

Check whether secret-key data is available in decrypted form. Returns false for gnu-dummy keys and null for public keys.

Overrides:
  - PublicKeyPacket#isDecrypted
Source:
  - packet/secret_key.js, line 314

##### Returns:

Type
  Boolean | null

#### isDummy() → {Boolean}

Check whether this is a gnu-dummy key

Source:
  - packet/secret_key.js, line 334

##### Returns:

Type
  Boolean

#### isMissingSecretKeyMaterial()

Check whether the key includes secret key material. Some secret keys do not include it, and can thus only be used for public-key operations (encryption and verification). Such keys are:

- GNU-dummy keys, where the secret material has been stripped away
- encrypted keys with unsupported S2K or cipher

Source:
  - packet/secret_key.js, line 326

#### makeDummy(configopt)

Remove private key material, converting the key to a dummy one. The resulting key cannot be used for signing/decrypting but can still verify signatures.

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`config` | Object | <optional> | Full configuration, defaults to openpgp.config

Source:
  - packet/secret_key.js, line 343

#### (async) read(bytes)

Internal parser for private keys as specified in RFC4880bis-04 section 5.5.3

##### Parameters:

Name | Type | Description
--- | --- | ---
`bytes` | Uint8Array | Input string to read the packet from

Overrides:
  - PublicKeyPacket#read
Source:
  - packet/secret_key.js, line 103

#### (async) validate()

Checks that the key parameters are consistent

Source:
  - packet/secret_key.js, line 500

##### Throws:

if validation was not successful

Type
  Error

#### write() → {Uint8Array}

Creates an OpenPGP key packet for the given key.

Overrides:
  - PublicKeyPacket#write
Source:
  - packet/secret_key.js, line 241

##### Returns:

A string of bytes containing the secret key OpenPGP packet.

Type
  Uint8Array

#### writeForHash(version)

Write packet in order to be hashed; either for a signature or a fingerprint

##### Parameters:

Name | Type | Description
--- | --- | ---
`version` | Integer | target version of signature or key

Overrides:
  - PublicKeyPacket#writeForHash
Source:
  - packet/public_key.js, line 174