Exemplo n.º 1
0
 def __init__(self,
              log2_n: int,
              r: int,
              p: int,
              salt: Optional[bytes] = None):
     self.log2_n, self.r, self.p = log2_n, r, p
     self.salt = salt if salt is not None else rand_unique_bytes(32)
Exemplo n.º 2
0
def __parse_scrypt(name: str, params: List[Tuple[str, Optional[str]]]) -> ScryptKdf:
    ret = ScryptKdf.sensitive()

    if name != "scrypt":
        raise ValueError(f"Name must be 'scrypt'. Was '{name}'")

    for key, value in params:
        if key == "fast":
            ret = ScryptKdf.fast()
        elif key == "sensitive":
            ret = ScryptKdf.sensitive()
        elif value is None:
            log.warning(f"Key '{key}' is unrecognized for scrypt and/or needs an associated value.")
        elif key in {"log2n", "log2_n"}:
            ret.log2_n = int(value)
        elif key in {"n"}:
            ret.log2_n = int(floor(log2(float(value))))
        elif key in {"r"}:
            ret.r = int(value)
        elif key in {"p"}:
            ret.p = int(value)
        elif key in {"salt", "s"}:
            ret.salt = b64.decode(value)
        elif key in {"salt-len", "sl"}:
            sint = int(value)
            ret.salt = rand_unique_bytes(sint)
        else:
            log.warning(f"Unrecognized key '{key}' in params string.")

    return ret
Exemplo n.º 3
0
def __parse_argon2(name: str, params: List[Tuple[str, Optional[str]]]) -> Argon2Kdf:
    ret = Argon2Kdf.sensitive()

    if name == "argon2":
        name = "argon2id"
    ret.type = Argon2Kdf.str_to_type(name)

    for key, value in params:
        if key == "fast":
            ret = Argon2Kdf.fast()
        elif key == "sensitive":
            ret = Argon2Kdf.sensitive()
        elif value is None:
            log.warning(f"Key '{key}' is unrecognized for argon2 and/or needs an associated value.")
        elif key in {"time_cost", "n", "n_iterations"}:
            vint = int(value)
            ret.time_cost = vint
        elif key in {"mem_cost", "mem", "m", "memory"}:
            mint = __parse_memory_unit(value) // 1024
            ret.memory_cost = mint
        elif key in {"salt", "s"}:
            ret.salt = b64.decode(value)
        elif key in {"salt-len", "sl"}:
            sint = int(value)
            ret.salt = rand_unique_bytes(sint)
        elif key in {"parallelism", "para", "p"}:
            pint = int(value)
            ret.parallelism = pint
        else:
            log.warning(f"Unrecognized key '{key}' in params string.")

    return ret
Exemplo n.º 4
0
def __parse_aes256gcm(
        name: str, params: List[Tuple[str, Optional[str]]]) -> Aes256GcmCipher:
    ret = Aes256GcmCipher()

    if name not in {
            "aes256", "aes256gcm", "aes-256", "aes-256-gcm", "aes256-gcm"
    }:
        raise ValueError(f"Given name '{name}' is not aes-256-gcm")

    for key, value in params:
        if key in {"iv", "nonce"}:
            if value is None:
                value = ''
            ret.nonce = b64.decode(value)
        if key in {"iv-len", "nonce-len"}:
            if value is None:
                log.warning(f"No value given for key '{key}'.")
            iint = int(value)
            ret.nonce = rand_unique_bytes(iint)
        else:
            log.warning(f"Unrecognized key '{key}' in params string.")

    return ret
Exemplo n.º 5
0
 def __init__(self, nonce: Optional[bytes] = None):
     if nonce is None:
         nonce = rand_unique_bytes(32)
     self.nonce = nonce
 def __init__(self, nonce: Optional[bytes] = None):
     if nonce is None:
         nonce = rand_unique_bytes(12)
     if len(nonce) != 12:
         raise ValueError("Nonce must be 12 bytes.")
     self.nonce = nonce