コード例 #1
0
int
crypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c,
                                          unsigned long long *clen_p,
                                          const unsigned char *m,
                                          unsigned long long mlen,
                                          const unsigned char *ad,
                                          unsigned long long adlen,
                                          const unsigned char *nsec,
                                          const unsigned char *npub,
                                          const unsigned char *k)
{
    unsigned long long clen = 0ULL;
    int                ret;

    if (mlen > UINT64_MAX - crypto_aead_chacha20poly1305_ietf_ABYTES) {
        abort(); /* LCOV_EXCL_LINE */
    }
    ret = crypto_aead_chacha20poly1305_ietf_encrypt_detached(c,
                                                             c + mlen, NULL,
                                                             m, mlen,
                                                             ad, adlen,
                                                             nsec, npub, k);
    if (clen_p != NULL) {
        if (ret == 0) {
            clen = mlen + crypto_aead_chacha20poly1305_ietf_ABYTES;
        }
        *clen_p = clen;
    }
    return ret;
}
コード例 #2
0
psResSize_t psChacha20Poly1305IetfEncryptDetached(
        psChacha20Poly1305Ietf_t *Context_p,
        const unsigned char *Plaintext_p,
        psSizeL_t PlaintextNBytes,
        const unsigned char Iv_p[PS_EXACTLY(PS_CHACHA20POLY1305_IETF_NPUBBYTES)],
        const unsigned char *Aad_p,
        psSize_t AadNBytes,
        unsigned char *Ciphertext_p,
        unsigned char Mac_p[PS_EXACTLY(PS_CHACHA20POLY1305_IETF_ABYTES)])
{
    int ret;

    /* Check input is not too large for this API. */
    if (PlaintextNBytes > (psSizeL_t)PS_RES_SIZE_OK_MAX)
    {
        return PS_ARG_FAIL;
    }
    
    ret = crypto_aead_chacha20poly1305_ietf_encrypt_detached(
            Ciphertext_p,
            Mac_p,
            NULL,
            (const unsigned char *)Plaintext_p,
            (unsigned long long)PlaintextNBytes,
            (const unsigned char *)Aad_p,
            (unsigned long long)AadNBytes,
            NULL,
            (const unsigned char *)Iv_p,
            (const unsigned char *)Context_p->key);

    if (ret == 0)
    {
        return (psResSize_t) PlaintextNBytes;
    }
    return PS_FAIL;
}