From bf3fa4b953063722cefd33783826f0b205795953 Mon Sep 17 00:00:00 2001 From: Guillaume Le Vaillant Date: Mon, 24 Oct 2022 11:28:44 +0200 Subject: Release version 0.58 --- NEWS | 2 +- README.org | 4 +- doc/ironclad.html | 684 +++++++++++++++++++++++++++--------------------------- ironclad.asd | 4 +- 4 files changed, 347 insertions(+), 347 deletions(-) diff --git a/NEWS b/NEWS index 93bd57f..8b286db 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,6 @@ -*- mode: outline -*- -* Changes since version 0.57 +* Version 0.57, released 2022-10-24 ** new features diff --git a/README.org b/README.org index 6dc1bab..2aeb8e5 100644 --- a/README.org +++ b/README.org @@ -80,8 +80,8 @@ thread. There is an example showing how it can be done in the section about :CUSTOM_ID: installation :END: -The current version of Ironclad is 0.57. It can be downloaded -at [[https://github.com/sharplispers/ironclad/archive/v0.57.tar.gz]]. +The current version of Ironclad is 0.58. It can be downloaded +at [[https://github.com/sharplispers/ironclad/archive/v0.58.tar.gz]]. If you are feeling adventurous, you can download a bleeding-edge version at [[https://github.com/sharplispers/ironclad]]. diff --git a/doc/ironclad.html b/doc/ironclad.html index 4e0a0cc..cb6d36d 100644 --- a/doc/ironclad.html +++ b/doc/ironclad.html @@ -1,7 +1,7 @@ - + Ironclad @@ -26,7 +26,7 @@ pre.example { margin-right: 10%; margin-top: 1.5em; margin-bottom: 1.5em; border

Ironclad

-
+

badge.svg?branch=master

@@ -116,7 +116,7 @@ are created using the bordeaux-threads library (or by a library using you are using the threading functions of your Common Lisp implementation directly, you have to bind the *prng* special variable to a new PRNG in each thread. There is an example showing how it can be done in the section about -make-prng. +make-prng.

@@ -125,8 +125,8 @@ thread. There is an example showing how it can be done in the section about

Installation

-The current version of Ironclad is 0.57. It can be downloaded -at https://github.com/sharplispers/ironclad/archive/v0.57.tar.gz. +The current version of Ironclad is 0.58. It can be downloaded +at https://github.com/sharplispers/ironclad/archive/v0.58.tar.gz. If you are feeling adventurous, you can download a bleeding-edge version at https://github.com/sharplispers/ironclad.

@@ -197,7 +197,7 @@ anything you want to with the code except claim that you wrote it.

Ciphers

-
(make-cipher name &key key mode initialization-vector padding tweak) => cipher
+
(make-cipher name &key key mode initialization-vector padding tweak) => cipher
 
@@ -206,7 +206,7 @@ Return a cipher object suitable for use for both encryption and decryption.

-name denotes the encryption algorithm to use. list-all-ciphers will tell you +name denotes the encryption algorithm to use. list-all-ciphers will tell you the names of all supported ciphers. They are:

    @@ -267,7 +267,7 @@ such as AES and DES can operate in several different modes:
  • ecb
  • cbc
  • ofb
  • -
  • cfb (note that Ironclad's CFB mode is n-bit CFB, where n is the block-length of the cipher)
  • +
  • cfb (note that Ironclad's CFB mode is n-bit CFB, where n is the block-length of the cipher)
  • cfb8 (this seems to be the mode other crypto packages call CFB)
  • ctr
@@ -281,10 +281,10 @@ such as AES and DES can operate in several different modes:

initialization-vector (IV) should be supplied only if mode requires one. initialization-vector should be a (simple-array (unsigned-byte 8) (*)). -The supplied IV should be the same length as the block-length of name. +The supplied IV should be the same length as the block-length of name. The Chacha and Salsa20 stream ciphers also use an initialization -vector (nonce). It should be 8 bytes long for Chacha and Salsa20, and -24 bytes long for XChacha and XSalsa20. +vector (nonce). It should be 8 or 12 bytes long for Chacha, 8 bytes long +for Salsa20, and 24 bytes long for XChacha and XSalsa20.

@@ -293,8 +293,8 @@ vector (nonce). It should be 8 bytes long for Chacha and Salsa20, and

-If padding is supplied, the specified padding method will be used by encrypt -and decrypt to handle short blocks when the :handle-final-block argument is +If padding is supplied, the specified padding method will be used by encrypt +and decrypt to handle short blocks when the :handle-final-block argument is supplied. padding will only be used if the mode is ECB or CBC. The possible values for padding are :pkcs7, :ansi-x923 and :iso-7816-4.

@@ -306,7 +306,7 @@ with the tweak key parameter.
-
(encrypt cipher plaintext ciphertext &key plaintext-start plaintext-end ciphertext-start handle-final-block) => n-bytes-consumed, n-bytes-produced
+
(encrypt cipher plaintext ciphertext &key plaintext-start plaintext-end ciphertext-start handle-final-block) => n-bytes-consumed, n-bytes-produced
 
@@ -318,7 +318,7 @@ data is placed in ciphertext starting at ciphertext-start.
-
(decrypt cipher ciphertext plaintext &key ciphertext-start ciphertext-end plaintext-start handle-final-block) => n-bytes-consumed, n-bytes-produced
+
(decrypt cipher ciphertext plaintext &key ciphertext-start ciphertext-end plaintext-start handle-final-block) => n-bytes-consumed, n-bytes-produced
 
@@ -330,11 +330,11 @@ data is placed in plaintext starting at plaintext-start.
-
(encrypt-in-place cipher text &key start end) => n-bytes-consumed, n-bytes-produced
+
(encrypt-in-place cipher text &key start end) => n-bytes-consumed, n-bytes-produced
 
-
(decrypt-in-place cipher text &key start end) => n-bytes-consumed, n-bytes-produced
+
(decrypt-in-place cipher text &key start end) => n-bytes-consumed, n-bytes-produced
 
@@ -342,23 +342,23 @@ data is placed in plaintext starting at plaintext-start. Encrypts or decrypts data in text between start and end "in-place" according to cipher. These functions are shorthand for:

-
+
 (encrypt cipher text text :plaintext-start start :plaintext-end end :ciphertext-start start)
 (decrypt cipher text text :ciphertext-start start :ciphertext-end end :plaintext-start start)
 

-Note: encrypt-in-place and decrypt-in-place do not support -a handle-final-block parameter as encrypt and decrypt do. If you +Note: encrypt-in-place and decrypt-in-place do not support +a handle-final-block parameter as encrypt and decrypt do. If you need the functionality that handle-final-block provides, then you -need to use encrypt and decrypt. +need to use encrypt and decrypt.

Note: n-bytes-consumed and n-bytes-produced may not always be equal to the length of the data specified in the call to -encrypt-in-place or decrypt-in-place. This subtlely is also present in -encrypt or decrypt. +encrypt-in-place or decrypt-in-place. This subtlely is also present in +encrypt or decrypt.

@@ -384,32 +384,32 @@ class of cipher determines the algorithm used to decrypt the message.

-
-

Inquiry functions

-
+
+

Inquiry functions

+
-
(list-all-ciphers) => list
+
(list-all-ciphers) => list
 

-Returns a list of cipher-names that may be validly passed to make-cipher. +Returns a list of cipher-names that may be validly passed to make-cipher.

-
(cipher-supported-p name) => boolean
+
(cipher-supported-p name) => boolean
 

-Returns t if name would be in the list returned by list-all-ciphers, +Returns t if name would be in the list returned by list-all-ciphers, nil otherwise.

-
(key-lengths cipher) => list
+
(key-lengths cipher) => list
 
@@ -419,7 +419,7 @@ Return a list of valid key lengths for cipher.
-
(block-length cipher) => number
+
(block-length cipher) => number
 
@@ -430,9 +430,9 @@ function always returns 1 for stream ciphers.
-
-

Key stream position

-
+
+

Key stream position

+

Block ciphers in CTR mode and some stream ciphers have the ability to change the current position within the key stream in constant time instead of having to @@ -440,21 +440,21 @@ consume all the bytes until the desired position is reached.

-
(keystream-position cipher &optional position) => number or boolean
+
(keystream-position cipher &optional position) => number or boolean
 

Return or change the current position within the key stream of a cipher. -When position is not supplied, keystream-position returns the current position +When position is not supplied, keystream-position returns the current position in the key stream, or nil if it can't be determined. When position is supplied, the key stream position of the cipher is set to that position if -possible. keystream-position returns t if the repositioning is performed +possible. keystream-position returns t if the repositioning is performed successfully, or nil otherwise.

-keystream-position can be used with the following ciphers: +keystream-position can be used with the following ciphers:

  • all the block ciphers (aes, twofish, etc.) in CTR mode
  • @@ -504,14 +504,14 @@ See your local Unicode guru for more details.
    -
    (make-digest digest-name &rest keys &key &allow-other-keys) => digester
    +
    (make-digest digest-name &rest keys &key &allow-other-keys) => digester
     

    Returns a digest object. digest-name is a keyword naming the algorithm you wish digester to use. The supported digest names can be found -by calling list-all-digests. They are: +by calling list-all-digests. They are:

    -Like for make-cipher, digest-name should be a symbol in the +Like for make-cipher, digest-name should be a symbol in the keyword or ironclad packages.

    @@ -587,13 +587,13 @@ any size. The size of the digest in bytes can be specified with the output-length key parameter:

    -
    +
     (make-digest :shake256 :output-length 123)
     
    -
    (update-digest digester thing &key &allow-other-keys) => (values)
    +
    (update-digest digester thing &key &allow-other-keys) => (values)
     
    @@ -613,7 +613,7 @@ listing them would get very tedious for no benefit. An example should suffice.

    -
    +
     (let ((digester (ironclad:make-digest :sha1))
           (array (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0)))
       ;; Update with 16 zeroes.
    @@ -633,14 +633,14 @@ suffice.
     Update the internal state of digester with the contents of stream,
     which must respond to read-byte or read-sequence with
     a (simple-array (unsigned-byte 8) (*)) and return digester. It
    -differs from digest-stream, below, in that you may need to digest data
    +differs from digest-stream, below, in that you may need to digest data
     before or after the contents of stream (this happens, for instance,
     when signing the contents of some file).
     

    -
    (produce-digest digester &key digest digest-start) => digest
    +
    (produce-digest digester &key digest digest-start) => digest
     
    @@ -651,24 +651,24 @@ Return the digest of the data processed by digester so far.

    If digest is provided, the computed digest will be placed into digest starting at digest-start. digest must be a -(simple-array (unsigned-byte 8) (*)). An insufficient-buffer-space +(simple-array (unsigned-byte 8) (*)). An insufficient-buffer-space error will be signaled if there is insufficient space in digest.

-
-

High-level convenience functions

-
+
+

High-level convenience functions

+

Several high-level convenience functions that encapsulate common -sequences of make-digest, update-digest and produce-digest are +sequences of make-digest, update-digest and produce-digest are provided by Ironclad as well. They come in two flavors: the first -takes a digest name as would be provided to make-digest. The second +takes a digest name as would be provided to make-digest. The second way to call these functions is to provide an actual digest object as the first argument. So one can say:

-
+
 (ironclad:digest-sequence :md5 *buffer*)
 
@@ -676,18 +676,18 @@ the first argument. So one can say: or, equivalently:

-
+
 (let ((digester (ironclad:make-digest :md5)))
   (ironclad:digest-sequence digester *buffer*))
 

-The second form comes in handy if you plan on reusing the digest object. +The second form comes in handy if you plan on reusing the digest object.

-
(digest-sequence digest-spec sequence &rest args &key start end digest digest-start) => digest
+
(digest-sequence digest-spec sequence &rest args &key start end digest digest-start) => digest
 
@@ -695,12 +695,12 @@ The second form comes in handy if you plan on reusing the Returns the digest of the subsequence of sequence bounded by start and end, according to digest-name. sequence must be a (vector (unsigned-byte 8)). digest and digest-start -are as in produce-digest. +are as in produce-digest.

-
(digest-stream digest-spec stream &rest args &key buffer start end digest digest-start) => digest
+
(digest-stream digest-spec stream &rest args &key buffer start end digest digest-start) => digest
 
@@ -709,7 +709,7 @@ Returns the digest of the contents of the stream specified by stream. read-byte must be a legal operation on stream and return an (unsigned-byte 8). In a similar fashion, read-sequence on stream must support reading into a (simple-array (unsigned-byte 8) (*)). -digest and digest-start are as in produce-digest. +digest and digest-start are as in produce-digest.

@@ -720,13 +720,13 @@ the data from the stream.

-
(digest-file digest-spec pathname &rest args &key buffer start end digest digest-start) => digest
+
(digest-file digest-spec pathname &rest args &key buffer start end digest digest-start) => digest
 

Returns the digest of the contents of the file named by pathname. -digest and digest-start are as in produce-digest. +digest and digest-start are as in produce-digest.

@@ -737,32 +737,32 @@ the data from the stream.

-
-

Inquiry functions

-
+
+

Inquiry functions

+
-
(list-all-digests) => list
+
(list-all-digests) => list
 

-Returns a list whose elements may be validly passed to make-digest. +Returns a list whose elements may be validly passed to make-digest.

-
(digest-supported-p name) => boolean
+
(digest-supported-p name) => boolean
 

-Returns t if name would be in the list returned by list-all-digests, +Returns t if name would be in the list returned by list-all-digests, nil otherwise.

-
(digest-length digest) => number
+
(digest-length digest) => number
 
@@ -773,9 +773,9 @@ a digest-name or a digest instance.
-
-

Miscellaneous

-
+
+

Miscellaneous

+

Ironclad digests are CLOS objects; the interesting thing about this for most purposes is that functions like reinitialize-instance are @@ -783,7 +783,7 @@ supported. This means one can write a fairly efficient clone of the md5sum program like so:

-
+
 (defun digest-sum-files (digest-name &rest files)
   (unless files
     (error "no files given to digest"))
@@ -800,15 +800,15 @@ supported. This means one can write a fairly efficient clone of the
 
-
-

Tree hashes

-
+
+

Tree hashes

+

Ironclad supports tree hashes, as described in Tree Hash EXchange format. You create tree hashes as if you were creating a digest:

-
+
 (ironclad:make-digest :tree-hash)
 
@@ -819,7 +819,7 @@ digest algorithm is so common, a convenience function that makes your intent obvious has also been provided:

-
+
 (ironclad:make-tiger-tree-hash)
 
@@ -828,7 +828,7 @@ You may indicate that you wish to use a different algorithm than Tiger:

-
+
 (ironclad:make-digest '(:treehash :digest :sha256))
 
@@ -836,7 +836,7 @@ Tiger: Or you might wish to use a different segment size:

-
+
 (ironclad:make-digest '(:tree-hash :block-length 16384))
 
@@ -862,7 +862,7 @@ integrity is required, but the secrecy of the data is not paramount. Ironclad provides different kinds of MACs:

    -
  • HMAC, specified in RFC 2104
  • +
  • HMAC, specified in RFC 2104
  • CMAC, specified in RFC 4493 and NIST document 800-38B
  • GMAC, specified in NIST document 800-38D
  • Blake2 and Blake2s MAC
  • @@ -873,14 +873,14 @@ Ironclad provides different kinds of MACs:
    -
    (make-mac mac-name key &rest args) => mac
    +
    (make-mac mac-name key &rest args) => mac
     

    Return a MAC object initialized with a secret key. mac-name is a keyword naming the algorithm you wish mac to use. The supported -MACs can be found by calling list-all-macs. They are: +MACs can be found by calling list-all-macs. They are:

    • blake2-mac
    • @@ -894,7 +894,7 @@ MACs can be found by calling list-all-macs. They are:

    -Like for make-digest, mac-name should be a symbol in the keyword +Like for make-digest, mac-name should be a symbol in the keyword or ironclad packages.

    @@ -902,7 +902,7 @@ or ironclad packages. Some MACs take extra arguments that can be specified in args.

    -
    +
     (make-mac :blake2-mac key &key digest-length)
     (make-mac :blake2s-mac key &key digest-length)
     (make-mac :cmac key cipher-name)
    @@ -914,34 +914,34 @@ Some MACs take extra arguments that can be specified in args.
     

    -When making a Blake2 MAC, the length of the key passed to make-mac +When making a Blake2 MAC, the length of the key passed to make-mac must be 64 bytes.

    -When making a Blake2s MAC, the length of the key passed to make-mac +When making a Blake2s MAC, the length of the key passed to make-mac must be 32 bytes.

    -When making a CMAC, cipher-name must have a block-length of either 8, 16, 32, +When making a CMAC, cipher-name must have a block-length of either 8, 16, 32, 64 or 128; this restriction is satisfied by many ciphers in Ironclad with the notable exception of stream ciphers. key must be an acceptable key for cipher-name.

    -When making a GMAC, cipher-name must have a block-length of 16. key must be +When making a GMAC, cipher-name must have a block-length of 16. key must be an acceptable key for cipher-name.

    -When making a Poly1305 MAC, the length of the key passed to make-mac must be +When making a Poly1305 MAC, the length of the key passed to make-mac must be 32 bytes.

    -When making a SipHash MAC, the length of the key passed to make-mac must be 16 +When making a SipHash MAC, the length of the key passed to make-mac must be 16 bytes. digest-length is 8 by default, but it can also be set to 16. By default, compression-rounds is 2 and finalization-rounds is 4.

    @@ -965,12 +965,12 @@ MAC objects support reinitialize-instance:

-The :key argument is the secret key, as provided to make-mac. +The :key argument is the secret key, as provided to make-mac.

-
(update-mac mac thing &key &allow-other-keys) => (values)
+
(update-mac mac thing &key &allow-other-keys) => (values)
 
@@ -990,7 +990,7 @@ listing them would get very tedious for no benefit. An example should suffice.

-
+
 (let* ((key (random-data 32))
        (mac (ironclad:make-mac :hmac key :sha256))
        (array (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0)))
@@ -1003,7 +1003,7 @@ suffice.
 
 
 
-
(produce-mac mac &key digest digest-start) => digest
+
(produce-mac mac &key digest digest-start) => digest
 
@@ -1016,46 +1016,46 @@ compute a "rolling MAC" of a document.

If digest is provided, the computed digest will be placed into digest starting at digest-start. digest must be a -(simple-array (unsigned-byte 8) (*)). An insufficient-buffer-space +(simple-array (unsigned-byte 8) (*)). An insufficient-buffer-space error will be signaled if there is insufficient space in digest.

-The length of the digest returned by produce-mac is determined by the -kind of MAC and the extra arguments passed to make-mac: +The length of the digest returned by produce-mac is determined by the +kind of MAC and the extra arguments passed to make-mac:

  • blake2-mac: from 1 to 64 bytes (64 by default)
  • blake2s-mac: from 1 to 32 bytes (32 by default)
  • -
  • cmac: block-length of the cipher-name passed to make-mac
  • +
  • cmac: block-length of the cipher-name passed to make-mac
  • gmac: 16 bytes
  • -
  • hmac: digest-length of the digest-name passed to make-mac
  • +
  • hmac: digest-length of the digest-name passed to make-mac
  • poly1305: 16 bytes
  • -
  • siphash: digest-length passed to make-mac (8 by default)
  • -
  • skein-mac: digest-length passed to make-mac (64 by default)
  • +
  • siphash: digest-length passed to make-mac (8 by default)
  • +
  • skein-mac: digest-length passed to make-mac (64 by default)
-
-

Inquiry functions

-
+
+

Inquiry functions

+
-
(list-all-macs) => list
+
(list-all-macs) => list
 

-Returns a list whose elements may be validly passed to make-mac. +Returns a list whose elements may be validly passed to make-mac.

-
(mac-supported-p name) => boolean
+
(mac-supported-p name) => boolean
 

-Returns t if name would be in the list returned by list-all-macs, +Returns t if name would be in the list returned by list-all-macs, nil otherwise.

@@ -1066,7 +1066,7 @@ Returns t if name would be in the list returned by Authenticated encryption
-
(make-authenticated-encryption-mode name &rest args) => mode
+
(make-authenticated-encryption-mode name &rest args) => mode
 
@@ -1076,7 +1076,7 @@ and decryption.

-name denotes the mode to use. list-all-authenticated-encryption-modes will +name denotes the mode to use. list-all-authenticated-encryption-modes will tell you the names of all the supported modes. They are:

-
-

Inquiry functions

-
+
+

Inquiry functions

+
-
(list-all-authenticated-encryption-modes) => list
+
(list-all-authenticated-encryption-modes) => list
 

Returns a list whose elements may be validly passed to -make-authenticated-encryption-mode. +make-authenticated-encryption-mode.

-
(authenticated-encryption-mode-supported-p name) => boolean
+
(authenticated-encryption-mode-supported-p name) => boolean
 

Returns t if name would be in the list returned by -list-all-authenticated-encryption-modes nil otherwise. +list-all-authenticated-encryption-modes nil otherwise.

@@ -1205,12 +1205,12 @@ Ironclad comes with a few key derivation functions:
-
(derive-key kdf passphrase salt iteration-count key-length) => digest
+
(derive-key kdf passphrase salt iteration-count key-length) => digest
 

-Given a key derivation function object (produced by make-kdf), +Given a key derivation function object (produced by make-kdf), a password and salt (both must be of type (simple-array (unsigned-byte 8) (*))), and number of iterations, returns the password digest as a byte array of length key-length. @@ -1228,7 +1228,7 @@ For bcrypt-pbkdf, the key-length must be between 1 and 1024.

-
(make-kdf kind &key digest n r p block-count additional-key additional-data) => kdf
+
(make-kdf kind &key digest n r p block-count additional-key additional-data) => kdf
 
@@ -1269,7 +1269,7 @@ memory cost parameters that must be defined such that

The default Scrypt parameters are N = 4096, r = 8, and p = 2. Please note that depending on the values of N and r, -derive-key may not be able to allocate sufficient space for its +derive-key may not be able to allocate sufficient space for its temporary arrays.

@@ -1281,18 +1281,18 @@ to precise the info vector from the -
(list-all-kdfs) => list
+
(list-all-kdfs) => list
 

-Returns a list of KDF kinds that may be validly passed to make-kdf. +Returns a list of KDF kinds that may be validly passed to make-kdf.

-
-

PBKDF convenience functions

-
+
+

PBKDF convenience functions

+

Ironclad comes with convenience functions for using PBKDF1 and PBKDF2 to store passwords. @@ -1300,7 +1300,7 @@ to store passwords.

-
(pbkdf2-hash-password password &key salt digest iterations) => password
+
(pbkdf2-hash-password password &key salt digest iterations) => password
 
@@ -1312,7 +1312,7 @@ byte vectors.
-
(pbkdf2-hash-password-to-combined-string password &key salt digest iterations) => password
+
(pbkdf2-hash-password-to-combined-string password &key salt digest iterations) => password
 
@@ -1324,13 +1324,13 @@ encodes the given salt and PBKDF2 algorithm parameters.
-
(pbkdf2-check-password password combined-salt-and-digest) => boolean
+
(pbkdf2-check-password password combined-salt-and-digest) => boolean
 

Given a password byte vector and a combined salt and digest string -produced by pbkdf2-hash-password-to-combined-string, checks whether +produced by pbkdf2-hash-password-to-combined-string, checks whether the password is valid.

@@ -1381,11 +1381,11 @@ Diffie-Hellman key exchange:
-
-

Key pair generation

-
+
+

Key pair generation

+
-
(generate-key-pair kind &key num-bits &allow-other-keys) => private-key, public-key
+
(generate-key-pair kind &key num-bits &allow-other-keys) => private-key, public-key
 
@@ -1403,27 +1403,27 @@ generated. For example, if Alice wants to generate a key pair for a Diffie-Hellman exchange with Bob's Elgamal key pair:

-
+
 (generate-key-pair :elgamal :compatible-with-key bob-public-key)
 
-
(list-all-key-pair-kinds) => list
+
(list-all-key-pair-kinds) => list
 

Returns a list of key pair kinds that may be validly passed to -generate-key-pair. +generate-key-pair.

-
-

Key construction

-
+
+

Key construction

+
-
(make-public-key kind &key &allow-other-keys) => public-key
+
(make-public-key kind &key &allow-other-keys) => public-key
 
@@ -1433,7 +1433,7 @@ arguments vary according to kind. The interesting bits are in the methods that specialize on kind, below.

-
+
 (make-public-key :curve25519 &key y) => public-key
 (make-public-key :curve448 &key y) => public-key
 (make-public-key :dsa &key p q g y) => public-key
@@ -1449,7 +1449,7 @@ methods that specialize on kind, below.
 
 
 
-
(make-private-key kind &key &allow-other-keys) => private-key
+
(make-private-key kind &key &allow-other-keys) => private-key
 
@@ -1459,7 +1459,7 @@ according to kind. The interesting bits are in the methods that specialize on kind, below.

-
+
 (make-private-key :curve25519 &key x y) => private-key
 (make-private-key :curve448 &key x y) => private-key
 (make-private-key :dsa &key p q g y x) => private-key
@@ -1508,43 +1508,43 @@ For RSA keys, the type of the parameters is integer:
 
-
-

Key destructuring

-
+
+

Key destructuring

+

-The destructure-public-key and destructure-private-key functions can +The destructure-public-key and destructure-private-key functions can be useful if you need to store keys somewhere for future use.

-
(destructure-public-key public-key) => plist
+
(destructure-public-key public-key) => plist
 

Return the elements of a public key in a plist. The indicators of the -plist match the &key arguments of the make-public-key method. +plist match the &key arguments of the make-public-key method.

-
(destructure-private-key private-key) => plist
+
(destructure-private-key private-key) => plist
 

Return the elements of a private key in a plist. The indicators of the -plist match the &key arguments of the make-private-key method. +plist match the &key arguments of the make-private-key method.

-
-

Digital signatures

-
+
+

Digital signatures

+
-
(sign-message key message &key start end &allow-other-keys) => signature
+
(sign-message key message &key start end &allow-other-keys) => signature
 
@@ -1555,14 +1555,14 @@ Return a signature of message between start and end signed

-Note: The sign-message does not perform the hashing of the data. You +Note: The sign-message does not perform the hashing of the data. You should hash your data using your favorite hash function, and then use -this hash as the message passed to sign-message. +this hash as the message passed to sign-message.

-
(verify-signature key message signature &key start end &allow-other-keys) => boolean
+
(verify-signature key message signature &key start end &allow-other-keys) => boolean
 
@@ -1573,9 +1573,9 @@ and nil otherwise.

-
-

Padding

-
+
+

Padding

+

To be secure, RSA signature requires the message to be padded. The pss key parameter is provided to pad (or unpad) the message @@ -1584,7 +1584,7 @@ The value of the pss key parameter can be either a digest name or t (which will use the sha1 digest).

-
+
 (sign-message rsa-private-key message :pss t) => signature
 (verify-signature rsa-public-key message signature :pss t) => boolean
 
@@ -1596,19 +1596,19 @@ necessary.
-
-

Signature nonce

-
+
+

Signature nonce

+

DSA, Elgamal and ECDSA (Secp256k1, Secp256r1, Secp384r1 and Secp521r1) signatures require the generation of a nonce. You must never sign two different messages with the same key and the same nonce, or anyone having these two signatures will be able compute your private key. Ironclad uses the -generate-signature-nonce method which by default generates random nonces. +generate-signature-nonce method which by default generates random nonces.

-
(generate-signature-nonce (key message &optional parameters)) => nonce
+
(generate-signature-nonce (key message &optional parameters)) => nonce
 
@@ -1620,12 +1620,12 @@ For DSA, parameters is q. For Elgamal, parameters is p If instead of random nonces, you want to have deterministic nonces (e.g. like -in RFC 6979), you will have to redefine generate-signature-nonce. For example, +in RFC 6979), you will have to redefine generate-signature-nonce. For example, to have deterministic nonces for Secp256k1 ECDSA signatures, you could do something like:

-
+
 (defmethod generate-signature-nonce ((key secp256k1-private-key) message &optional parameters)
   (declare (ignore parameters))
   (compute-deterministic-nonce key message))
@@ -1633,22 +1633,22 @@ something like:
 
-
-

Format of signatures

-
+
+

Format of signatures

+

-sign-message returns signatures as octet vectors. When the signature +sign-message returns signatures as octet vectors. When the signature contains several values (e.g. the R and S values of DSA signatures), the octet vector is the concatenation of these values (e.g. the first half of the vector is the R value, the second half is the S value). -You can use the make-signature and destructure-signature functions if +You can use the make-signature and destructure-signature functions if you need access to the elements of a signature (e.g. to use a different kind of serialization).

-
(make-signature kind &key &allow-other-keys) => signature
+
(make-signature kind &key &allow-other-keys) => signature
 
@@ -1658,7 +1658,7 @@ vary according to kind. The interesting bits are in the methods that specialize on kind, below.

-
+
 (make-signature :dsa &key r s n-bits) => signature
 (make-signature :ed25519 &key r s) => signature
 (make-signature :ed448 &key r s) => signature
@@ -1688,23 +1688,23 @@ For RSA signatures, the type of the parameters s and n-bits is
 
 
 
-
(destructure-signature kind signature) => plist
+
(destructure-signature kind signature) => plist
 

Return the elements of a signature in a plist. The indicators of the -plist match the &key arguments of the make-signature method. +plist match the &key arguments of the make-signature method.

-
-

Encryption and decryption

-
+
+

Encryption and decryption

+
-
(encrypt-message key message &key start end &allow-other-keys) => encrypted-message
+
(encrypt-message key message &key start end &allow-other-keys) => encrypted-message
 
@@ -1715,7 +1715,7 @@ the class of key determines the algorithm used to encrypt the message.
-
(decrypt-message key message &key start end n-bits &allow-other-keys) => decrypted-message
+
(decrypt-message key message &key start end n-bits &allow-other-keys) => decrypted-message
 
@@ -1728,9 +1728,9 @@ without padding, which is probably a bad idea, c.f. Padding section).

-
-

Padding

-
+
+

Padding

+

To be secure, RSA encryption requires the message to be padded. The oaep key parameter is provided to pad (or unpad) the message during @@ -1739,7 +1739,7 @@ The value of the oaep key parameter can be either a digest name or t (which will use the sha1 digest).

-
+
 (encrypt-message rsa-public-key message :oaep t) => encrypted-message
 (decrypt-message rsa-private-key message :oaep t) => decrypted-message
 
@@ -1751,23 +1751,23 @@ necessary.
-
-

Format of messages

-
+
+

Format of messages

+

-encrypt-message returns encrypted messages as octet vectors. When the +encrypt-message returns encrypted messages as octet vectors. When the message contains several values (e.g. the C1 and C2 values of Elgamal messages), the octet vector is the concatenation of these values (e.g. the first half of the vector is the big-endian representation of the C1 value, the second half is the C2 value). You can use the -make-message and destructure-message functions if you need access to +make-message and destructure-message functions if you need access to the elements of a message (e.g. to use a different kind of serialization).

-
(make-message kind &key &allow-other-keys) => message
+
(make-message kind &key &allow-other-keys) => message
 
@@ -1777,7 +1777,7 @@ vary according to kind. The interesting bits are in the methods that specialize on kind, below.

-
+
 (make-message :elgamal &key c1 c2 n-bits) => message
 (make-message :rsa &key m n-bits) => message
 
@@ -1794,23 +1794,23 @@ For RSA signatures, the type of the parameters m and n-bits is
-
(destructure-message kind message) => plist
+
(destructure-message kind message) => plist
 

Return the elements of a message in a plist. The indicators of the -plist match the &key arguments of the make-message method. +plist match the &key arguments of the make-message method.

-
-

Diffie-Hellman key exchange

-
+
+

Diffie-Hellman key exchange

+
-
(diffie-hellman private-key public-key) => bytes
+
(diffie-hellman private-key public-key) => bytes
 
@@ -1845,7 +1845,7 @@ use os-prng, which is the default.
-
(make-prng name &key seed) => prng
+
(make-prng name &key seed) => prng
 
@@ -1854,7 +1854,7 @@ Create a pseudo-random number generator.

-name denotes the style of PRNG to use. list-all-prngs will tell you +name denotes the style of PRNG to use. list-all-prngs will tell you the names of all supported PRNGs. Currently supported PRNGs are:

    @@ -1882,7 +1882,7 @@ be used to seed the PRNG.

    -In single-threaded applications, you should very rarely need to call make-prng; +In single-threaded applications, you should very rarely need to call make-prng; the default OS-provided PRNG should be appropriate in nearly all cases.

    @@ -1896,7 +1896,7 @@ Lisp implementation directly, you have to bind the *prng* special v a new PRNG in each thread. For example:

    -
    +
     (make-thread (lambda ()
                    (let ((crypto:*prng* (crypto:make-prng :os)))
                      (forms-for-thread-1))))
    @@ -1908,7 +1908,7 @@ a new PRNG in each thread. For example:
     
     
     
    -
    (list-all-prngs) => list
    +
    (list-all-prngs) => list
     
    @@ -1918,7 +1918,7 @@ List all known PRNG types.
    -
    (random-data num-bytes &optional prng) => bytes
    +
    (random-data num-bytes &optional prng) => bytes
     
    @@ -1929,7 +1929,7 @@ state of the generator.
    -
    (random-bits num-bits &optional prng) => integer
    +
    (random-bits num-bits &optional prng) => integer
     
    @@ -1939,19 +1939,19 @@ Generate an integer with num-bits bits.
    -
    (strong-random limit &optional prng) => number
    +
    (strong-random limit &optional prng) => number
     

    -A drop-in replacement for common-lisp:random, strong-random +A drop-in replacement for common-lisp:random, strong-random generates a number (an integer if limit is an integer and a float if it is a float) between 0 and limit - 1 in an unbiased fashion.

    -
    (read-os-random-seed source &optional prng) => reseed-count
    +
    (read-os-random-seed source &optional prng) => reseed-count
     
    @@ -1968,14 +1968,14 @@ on Unix; CryptGenRandom on Windows) and reseed prng.
    -
    (read-seed path &optional prng) => t
    +
    (read-seed path &optional prng) => t
     

    Read enough bytes from path to reseed prng, then generate a pseudo-random seed and write it back to path. If path doesn't -exist, calls read-os-random-seed to get a truly random seed from the +exist, calls read-os-random-seed to get a truly random seed from the OS. Note that reseeding does not reset the generator's state to the seed value; rather, it combines the generator's state with the seed to form a new state. @@ -1983,7 +1983,7 @@ to form a new state.

    -
    (write-seed path &optional prng) => t
    +
    (write-seed path &optional prng) => t
     
    @@ -1992,10 +1992,10 @@ Generate enough random data to reseed prng, then write it to path.

-
-

Example

-
-
+
+

Example

+
+
 (crypto:random-data 16)
 => #(61 145 133 130 220 200 90 86 0 101 62 169 0 40 101 78)
 
@@ -2008,9 +2008,9 @@ Generate enough random data to reseed prng, then write it to path.
 
-
-

Fortuna

-
+
+

Fortuna

+

You should only use the Fortuna PRNG if your OS does not provided a sufficiently-good PRNG. If you use a Unix or Unix-like OS (e.g. @@ -2039,7 +2039,7 @@ spread entropy across all 32 pools.

Fortuna automatically feeds entropy from the pools back into its -random state when random-data is called, using a method designed to +random state when random-data is called, using a method designed to make it resistant to various avenues of attack; even in case of generator compromise it will return to a safe state within a bounded time. @@ -2059,7 +2059,7 @@ It also will not reseed more than ten times per second.

-
(add-random-event source pool-id event &optional prng) => pool-length
+
(add-random-event source pool-id event &optional prng) => pool-length
 
@@ -2095,9 +2095,9 @@ for SBCL, CMUCL, OpenMCL/CCL, Lispworks, ABCL, ECL, Clisp and Allegro.

-
-

Octet streams

-
+
+

Octet streams

+

Octet streams are very similar to Common Lisp's string-stream except they deal in octets instead of characters. @@ -2105,7 +2105,7 @@ they deal in octets instead of characters.

-
(make-octet-input-stream buffer &optional start end) => octet-input-stream
+
(make-octet-input-stream buffer &optional start end) => octet-input-stream
 
@@ -2115,7 +2115,7 @@ As make-string-input-stream, only with octets instead of characters
-
(make-octet-output-stream) => octet-output-stream
+
(make-octet-output-stream) => octet-output-stream
 
@@ -2125,7 +2125,7 @@ As make-string-output-stream, only with octets instead of character
-
(get-output-stream-octets stream) => octet-vector
+
(get-output-stream-octets stream) => octet-vector
 
@@ -2136,7 +2136,7 @@ of a string output-stream.
-
(with-octet-input-stream ((var buffer &optional (start 0) end) &body body))
+
(with-octet-input-stream ((var buffer &optional (start 0) end) &body body))
 
@@ -2148,7 +2148,7 @@ Within body, var is bound to an octet input stream. Reading from
-
(with-octet-output-stream ((var) &body body)) => bytes
+
(with-octet-output-stream ((var) &body body)) => bytes
 
@@ -2156,14 +2156,14 @@ Within body, var is bound to an octet input stream. Reading from Within body, var is bound to an octet output stream. After all the forms in body have been executed, the data that has been written to var (and that hasn't been consumed by a call to -get-output-stream-octets within body) is returned. +get-output-stream-octets within body) is returned.

-
-

Digest streams

-
+
+

Digest streams

+

Digest streams compute a digest of the data written to them according to a specific digest algorithm. @@ -2172,7 +2172,7 @@ to a specific digest algorithm.

Example:

-
+
 (defun frobbing-function (stream)
   ;; We want to compute a digest of the data being written to STREAM
   ;; without involving our callees in the process.
@@ -2187,7 +2187,7 @@ Example:
 
 
 
-
(make-digesting-stream digest &rest args) => stream
+
(make-digesting-stream digest &rest args) => stream
 
@@ -2195,18 +2195,18 @@ Example: Make a stream that computes a digest of the data written to it according to the algorithm digest. The parameters that can be used by some algorithms can be specified as args. -produce-digest may be used to obtain a digest of all the data written +produce-digest may be used to obtain a digest of all the data written to the stream.

-Note: Calling produce-digest on a digest stream does not alter +Note: Calling produce-digest on a digest stream does not alter the internal state of the digest.

-
(with-digesting-stream (var digest-name &rest args) &body body) => digest
+
(with-digesting-stream (var digest-name &rest args) &body body) => digest
 
@@ -2219,9 +2219,9 @@ returned.
-
-

Cipher streams

-
+
+

Cipher streams

+

Cipher streams encrypt or decrypt the data written to or read from them according to a specific cipher algorithm. @@ -2229,7 +2229,7 @@ them according to a specific cipher algorithm.

-
(make-encrypting-stream stream cipher mode key &key initialization-vector direction) => stream
+
(make-encrypting-stream stream cipher mode key &key initialization-vector direction) => stream
 
@@ -2245,7 +2245,7 @@ stream is encrypted before being sent to stream.
-
(make-decrypting-stream stream cipher mode key &key initialization-vector direction) => stream
+
(make-decrypting-stream stream cipher mode key &key initialization-vector direction) => stream
 
@@ -2262,12 +2262,12 @@ stream is decrypted before being sent to stream.

Note: Only stream ciphers and block ciphers in CTR, CFB, CFB8 or OFB mode are -supported by make-encrypting-stream and make-decrypting-stream. +supported by make-encrypting-stream and make-decrypting-stream.

-
(with-encrypting-stream ((var stream cipher mode key &key initialization-vector direction) &body body))
+
(with-encrypting-stream ((var stream cipher mode key &key initialization-vector direction) &body body))
 
@@ -2278,7 +2278,7 @@ the last form of body is returned.
-
(with-decrypting-stream ((var stream cipher mode key &key initialization-vector direction) &body body))
+
(with-decrypting-stream ((var stream cipher mode key &key initialization-vector direction) &body body))
 
@@ -2289,16 +2289,16 @@ the last form of body is returned.
-
-

MAC streams

-
+
+

MAC streams

+

MAC streams compute a message authentication code of the data written to them according to a specific MAC algorithm.

-
(make-authenticating-stream mac key &rest args) => stream
+
(make-authenticating-stream mac key &rest args) => stream
 
@@ -2306,12 +2306,12 @@ to them according to a specific MAC algorithm. Make a stream that computes a MAC of the data written to it according to the algorithm mac initialized with a key. The parameters used to create the MAC can be specified as args. -produce-mac may be used to obtain a MAC of all the data written to the +produce-mac may be used to obtain a MAC of all the data written to the stream.

-Note: Calling produce-mac on a MAC stream does not alter the +Note: Calling produce-mac on a MAC stream does not alter the internal state of the MAC.

@@ -2319,7 +2319,7 @@ internal state of the MAC.

Example: encrypt some data and compute a MAC of the ciphertext

-
+
 (let* ((data ...)
        (output-stream ...)
        (encryption-key ...)
@@ -2342,7 +2342,7 @@ Example: encrypt some data and compute a MAC of the ciphertext
 
 
 
-
(with-authenticating-stream (var mac-name key &rest args) &body body) => mac
+
(with-authenticating-stream (var mac-name key &rest args) &body body) => mac
 
@@ -2360,7 +2360,7 @@ written to var is returned.

Utility functions

-
(ub16ref/le vector index) => value
+
(ub16ref/le vector index) => value
 (ub32ref/le vector index) => value
 (ub64ref/le vector index) => value
 
@@ -2375,7 +2375,7 @@ functions are SETFable.
-
(ub16ref/be vector index) => value
+
(ub16ref/be vector index) => value
 (ub32ref/be vector index) => value
 (ub64ref/be vector index) => value
 
@@ -2387,41 +2387,41 @@ As the above, only the value is stored in big-endian order.
-
(byte-array-to-hex-string vector &key start end element-type) => string
+
(byte-array-to-hex-string vector &key start end element-type) => string
 (hex-string-to-byte-array string &key start end) => string
 (ascii-string-to-byte-array string &key start end) => vector
 

-byte-array-to-hex-string converts the bytes of vector between +byte-array-to-hex-string converts the bytes of vector between start and end into a hexadecimal string. It is useful for converting digests to a more readable form. element-type indicates the element-type of the returned string.

-hex-string-to-byte-array parses a substring of string delimited +hex-string-to-byte-array parses a substring of string delimited start and end of hexadecimal digits into a byte array.

-ascii-string-to-byte-array is provided as a quick and dirty way to -convert a string to a byte array suitable for feeding to update-digest -or encrypt. Care should be taken to ensure that the provided string is +ascii-string-to-byte-array is provided as a quick and dirty way to +convert a string to a byte array suitable for feeding to update-digest +or encrypt. Care should be taken to ensure that the provided string is actually an ASCII string. start and end have their usual interpretations.

-
(octets-to-integer octet-vec &key start end big-endian n-bits) => number
+
(octets-to-integer octet-vec &key start end big-endian n-bits) => number
 (integer-to-octets bignum &key n-bits big-endian) => vector
 

-octets-to-integer converts the bytes of octet-vec between start +octets-to-integer converts the bytes of octet-vec between start and end to an integer as though the bytes denoted a number in base 256. big-endian is a boolean indicating whether the bytes are to be read in big-endian or little-endian order. n-bits specifies @@ -2430,12 +2430,12 @@ number.

-integer-to-octets is the reverse operation. +integer-to-octets is the reverse operation.

-
(expt-mod n exponent modulus) => number
+
(expt-mod n exponent modulus) => number
 (expt-mod/unsafe n exponent modulus) => number
 
@@ -2443,20 +2443,20 @@ number.

Raises n to the exponent power modulo modulus in a more efficient fashion than (mod (expt n exponent) modulus). -expt-mod is using the Montgomery ladder algorithm to be more robust +expt-mod is using the Montgomery ladder algorithm to be more robust against timing attacks. -expt-mod/unsafe runs faster than expt-mod but is not safe against +expt-mod/unsafe runs faster than expt-mod but is not safe against timing attacks; don't use it on secret data.

-
(prime-p n &optional prng) => boolean
+
(prime-p n &optional prng) => boolean
 

-prime-p returns t if n has a high probability of being a prime number, and +prime-p returns t if n has a high probability of being a prime number, and nil if it is a composite number. The probable primality is determined by first doing trial divisions with small primes, then running several Miller-Rabin tests with random bases, and finally doing a Lucas test. The @@ -2467,7 +2467,7 @@ probability of returning t for a composite number to be at most 1/2

-
make-random-salt &optional size => bytes
+
make-random-salt &optional size => bytes
 
@@ -2478,7 +2478,7 @@ for use as a password salt.
-
constant-time-equal data1 data2 => boolean
+
constant-time-equal data1 data2 => boolean
 
@@ -2495,7 +2495,7 @@ or MACs.

Conditions

-
ironclad-error
+
ironclad-error
 
@@ -2506,152 +2506,152 @@ a direct subtype of simple-error without any extra slots or options
-
initialization-vector-not-supplied
+
initialization-vector-not-supplied
 

-This error is signaled by make-cipher when an initialization vector is +This error is signaled by make-cipher when an initialization vector is not provided and the requested mode requires an initialization vector.

-
invalid-initialization-vector
+
invalid-initialization-vector
 

This error is signaled when an invalid initialization vector is -supplied to make-cipher (e.g. when the length of the initialization +supplied to make-cipher (e.g. when the length of the initialization vector does not match the block length of the cipher).

-
invalid-key-length
+
invalid-key-length
 

-This error is signaled when the key provided to make-cipher is not of +This error is signaled when the key provided to make-cipher is not of an acceptable length for the requested cipher.

-
unsupported-cipher
+
unsupported-cipher
 

-This error is signaled when the cipher-name provided to make-cipher -is not cipher-supported-p. +This error is signaled when the cipher-name provided to make-cipher +is not cipher-supported-p.

-
unsupported-mode
+
unsupported-mode
 

This error is signaled when the mode provided to -make-cipher is not mode-supported-p. +make-cipher is not mode-supported-p.

-
unsupported-padding
+
unsupported-padding
 

-This error is signaled when the padding provided to make-cipher is not +This error is signaled when the padding provided to make-cipher is not supported.

-
unsupported-digest
+
unsupported-digest
 

This error is signaled when the digest-name provided to -make-digest is not digest-supported-p. +make-digest is not digest-supported-p.

-
unsupported-mac
+
unsupported-mac
 

This error is signaled when the mac-name provided to -make-mac is not mac-supported-p. +make-mac is not mac-supported-p.

-
insufficient-buffer-space
+
insufficient-buffer-space
 

This error is signaled when Ironclad needs to stuff some data into -a buffer (e.g. when the user provides digest to produce-digest and +a buffer (e.g. when the user provides digest to produce-digest and there is insufficient space).

-
key-not-supplied
+
key-not-supplied
 

This error is signaled when a :key argument is not provided -to make-cipher. +to make-cipher.

-
unsupported-kdf
+
unsupported-kdf
 

This error is signaled when an invalid KDF name is provided -to make-kdf. +to make-kdf.

-
unsupported-scrypt-cost-factors
+
unsupported-scrypt-cost-factors
 

This error is signaled when invalid Scrypt cost factors are provided -to make-kdf. +to make-kdf.

-
unsupported-argon2-cost-factors
+
unsupported-argon2-cost-factors
 

This error is signaled when invalid Argon2 parameters are provided -to make-kdf. +to make-kdf.

-
invalid-padding
+
invalid-padding
 
@@ -2662,84 +2662,84 @@ invalid.
-
invalid-mac-parameter
+
invalid-mac-parameter
 

This error is signaled when an invalid parameter is provided -to make-mac. +to make-mac.

-
invalid-signature-length
+
invalid-signature-length
 

This error is signaled when a signature with an invalid length is provided -to verify-signature or destructure-signature. +to verify-signature or destructure-signature.

-
invalid-message-length
+
invalid-message-length
 

This error is signaled when a message with an invalid length is provided -to encrypt-message, decrypt-message or destructure-message. +to encrypt-message, decrypt-message or destructure-message.

-
missing-key-parameter
+
missing-key-parameter
 

This error is signaled when it is determined that a parameter is -missing in a call to make-public-key or make-private-key. +missing in a call to make-public-key or make-private-key.

-
missing-message-parameter
+
missing-message-parameter
 

This error is signaled when it is determined that a parameter is -missing in a call to make-message. +missing in a call to make-message.

-
missing-signature-parameter
+
missing-signature-parameter
 

This error is signaled when it is determined that a parameter is -missing in a call to make-signature. +missing in a call to make-signature.

-
incompatible-keys
+
incompatible-keys
 

This error is signaled when incompatible keys are provided to -diffie-hellman. +diffie-hellman.

-
invalid-curve-point
+
invalid-curve-point
 
@@ -2749,18 +2749,18 @@ This error is signaled when trying to use an invalid curve point.
-
invalid-public-key-length
+
invalid-public-key-length
 

This error is signaled when a public key with an invalid length is -provided to verify-signature. +provided to verify-signature.

-
oaep-decoding-error
+
oaep-decoding-error
 
@@ -2770,18 +2770,18 @@ This error is signaled when the OAEP decoding of a message fails.
-
unsupported-authenticated-encryption-mode
+
unsupported-authenticated-encryption-mode
 

This error is signaled when an invalid mode name is provided to -make-authenticated-encryption-mode. +make-authenticated-encryption-mode.

-
bad-authentication-tag
+
bad-authentication-tag
 
@@ -2802,15 +2802,15 @@ subsystems of the algorithms you need.

For example if you need only AES and SHA256:

-
+
 (asdf:load-system "ironclad/cipher/aes")
 (asdf:load-system "ironclad/digest/sha256")
 
-
-

Available subsystems

-
+
+

Available subsystems

+
  • ironclad
      diff --git a/ironclad.asd b/ironclad.asd index 570b1df..5c72c3a 100644 --- a/ironclad.asd +++ b/ironclad.asd @@ -10,7 +10,7 @@ (defclass ironclad-system (system) () (:default-initargs - :version "0.57" + :version "0.58" :author "Nathan Froyd " :maintainer "Guillaume LE VAILLANT " :description "A cryptographic toolkit written in pure Common Lisp" @@ -248,7 +248,7 @@ (defsystem "ironclad/tests" :depends-on ("ironclad" "rt") - :version "0.57" + :version "0.58" :in-order-to ((test-op (load-op "ironclad/tests"))) :perform (test-op (o s) (or (funcall (intern "DO-TESTS" (find-package "RTEST"))) -- cgit v1.2.3-70-g09d2