Module refinery.units.crypto.keyderive.argon2id

Expand source code Browse git
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from refinery.units import Unit, Arg


class argon2id(Unit):
    """
    Implements Argon2id-based key derivation.
    """

    def __init__(
        self,
        size: Arg.Number(metavar='n', help='number of bytes to generate'),
        salt: Arg.Binary(metavar='S', help='salt bytes'),
        iter: Arg.Number(metavar='t', help='number of iterations, defaults to {default}') = 1,
        jobs: Arg.Number(metavar='p', help='parallelism, defaults to {default}') = 1,
        cost: Arg.Number(metavar='m', help='memory cost in kibibytes, defaults to the minimum of 8192 per job.') = None,
        skey: Arg.Binary(metavar='K', help='optional secret key') = None,
        more: Arg.Binary(metavar='X', help='optional additional data') = None,
    ):
        super().__init__(size=size, salt=salt, iter=iter, skey=skey, jobs=jobs, cost=cost, more=more)

    @Unit.Requires('cryptography', 'default', 'extended')
    def _argon2id():
        from cryptography.hazmat.primitives.kdf.argon2 import Argon2id
        return Argon2id

    def process(self, data):
        m = self.args.cost
        p = self.args.jobs
        S = self.args.salt
        K = self.args.skey
        n = self.args.size
        X = self.args.more
        t = self.args.iter
        K = K and bytes(K) or None
        X = X and bytes(X) or None
        S = bytes(S)
        m = m or 8192 * p
        a2id = self._argon2id(
            salt=S, length=n, iterations=t, lanes=p, memory_cost=m, ad=X, secret=K)
        return a2id.derive(data)

Classes

class argon2id (size, salt, iter=1, jobs=1, cost=None, skey=None, more=None)

Implements Argon2id-based key derivation.

Expand source code Browse git
class argon2id(Unit):
    """
    Implements Argon2id-based key derivation.
    """

    def __init__(
        self,
        size: Arg.Number(metavar='n', help='number of bytes to generate'),
        salt: Arg.Binary(metavar='S', help='salt bytes'),
        iter: Arg.Number(metavar='t', help='number of iterations, defaults to {default}') = 1,
        jobs: Arg.Number(metavar='p', help='parallelism, defaults to {default}') = 1,
        cost: Arg.Number(metavar='m', help='memory cost in kibibytes, defaults to the minimum of 8192 per job.') = None,
        skey: Arg.Binary(metavar='K', help='optional secret key') = None,
        more: Arg.Binary(metavar='X', help='optional additional data') = None,
    ):
        super().__init__(size=size, salt=salt, iter=iter, skey=skey, jobs=jobs, cost=cost, more=more)

    @Unit.Requires('cryptography', 'default', 'extended')
    def _argon2id():
        from cryptography.hazmat.primitives.kdf.argon2 import Argon2id
        return Argon2id

    def process(self, data):
        m = self.args.cost
        p = self.args.jobs
        S = self.args.salt
        K = self.args.skey
        n = self.args.size
        X = self.args.more
        t = self.args.iter
        K = K and bytes(K) or None
        X = X and bytes(X) or None
        S = bytes(S)
        m = m or 8192 * p
        a2id = self._argon2id(
            salt=S, length=n, iterations=t, lanes=p, memory_cost=m, ad=X, secret=K)
        return a2id.derive(data)

Ancestors

Class variables

var required_dependencies
var optional_dependencies

Inherited members