Chilkat Examples

ChilkatHOME.NET Core C#Android™AutoItCC#C++Chilkat2-PythonCkPythonClassic ASPDataFlexDelphi ActiveXDelphi DLLGoJavaLianjaMono C#Node.jsObjective-CPHP ActiveXPHP ExtensionPerlPowerBuilderPowerShellPureBasicRubySQL ServerSwift 2Swift 3,4,5...TclUnicode CUnicode C++VB.NETVBScriptVisual Basic 6.0Visual FoxProXojo Plugin

Unicode C Examples

Web API Categories

ASN.1
AWS KMS
AWS Misc
Amazon EC2
Amazon Glacier
Amazon S3
Amazon S3 (new)
Amazon SES
Amazon SNS
Amazon SQS
Async
Azure Cloud Storage
Azure Key Vault
Azure Service Bus
Azure Table Service
Base64
Bounced Email
Box
CAdES
CSR
CSV
Certificates
Cloud Signature CSC
Code Signing
Compression
DKIM / DomainKey
DNS
DSA
Diffie-Hellman
Digital Signatures
Dropbox
Dynamics CRM
EBICS
ECC
Ed25519
Email Object
Encryption
FTP
FileAccess
Firebase
GMail REST API
GMail SMTP/IMAP/POP
Geolocation
Google APIs
Google Calendar
Google Cloud SQL
Google Cloud Storage
Google Drive
Google Photos
Google Sheets
Google Tasks
Gzip
HTML-to-XML/Text
HTTP

HTTP Misc
IMAP
JSON
JSON Web Encryption (JWE)
JSON Web Signatures (JWS)
JSON Web Token (JWT)
Java KeyStore (JKS)
MHT / HTML Email
MIME
MS Storage Providers
Microsoft Graph
Misc
NTLM
OAuth1
OAuth2
OIDC
Office365
OneDrive
OpenSSL
Outlook
Outlook Calendar
Outlook Contact
PDF Signatures
PEM
PFX/P12
PKCS11
POP3
PRNG
REST
REST Misc
RSA
SCP
SCard
SFTP
SMTP
SSH
SSH Key
SSH Tunnel
ScMinidriver
SharePoint
SharePoint Online
Signing in the Cloud
Socket/SSL/TLS
Spider
Stream
Tar Archive
ULID/UUID
Upload
WebSocket
XAdES
XML
XML Digital Signatures
XMP
Zip
curl
uncategorized

 

 

 

(Unicode C) ChaCha20 Encryption

Demonstrates ChaCha20 encryption and decryption. (Introduced in Chilkat v9.5.0.55) This example duplicates the results of Test Vector #3 for ChaCha20 Encryption in RFC 7539.

Chilkat C/C++ Library Downloads

MS Visual C/C++

Linux/CentOS C/C++

Alpine Linux C/C++

MAC OS X C/C++

armhf/aarch64 C/C++

C++ Builder

iOS C/C++

Android C/C++

Solaris C/C++

MinGW C/C++

#include <C_CkCrypt2W.h>

void ChilkatSample(void)
    {
    HCkCrypt2W crypt;
    const wchar_t *ivHex;
    const wchar_t *keyHex;
    const wchar_t *plainText;
    const wchar_t *encStr;
    const wchar_t *decStr;

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    crypt = CkCrypt2W_Create();

    // Set the encryption algorithm to chacha20
    // chacha20 is a stream cipher, and therefore no cipher mode applies.
    CkCrypt2W_putCryptAlgorithm(crypt,L"chacha20");

    // The key length for chacha20 is always 256-bits.
    CkCrypt2W_putKeyLength(crypt,256);

    // Note: "padding" only applies to block encryption algorithmns.
    // Since chacha20 is a stream cipher, there is no padding and the output
    // number of bytes is exactly equal to the input.

    // EncodingMode specifies the encoding of the output for
    // encryption, and the input for decryption.
    // Valid modes are (case insensitive) "Base64", "modBase64", "Base32", "Base58", "UU", 
    // "QP" (for quoted-printable), "URL" (for url-encoding), "Hex", 
    // "Q", "B", "url_oauth", "url_rfc1738", "url_rfc2396", and "url_rfc3986".
    CkCrypt2W_putEncodingMode(crypt,L"hex");

    // The inputs to ChaCha20 encryption, specified by RFC 7539, are:
    // 1) A 256-bit secret key.
    // 2) A 96-bit nonce.
    // 3) A 32-bit initial count.
    // The IV property is used to specify the chacha20 nonce.
    // For a 96-bit nonce, the IV should be 12 bytes in length.
    // 
    // Note: Some implementations of chacha20, such as that used internally by SSH,
    // use a 64-bit nonce and 64-bit count.  To do chacha20 encryption in this way,
    // simply provide 8 bytes for the IV instead of 12 bytes.  Chilkat will then automatically
    // use 8 bytes (64-bits) for the count. 

    // This example duplicates Test Vector #3 (for ChaCha20 encryption) from RFC 7539.
    ivHex = L"000000000000000000000002";
    CkCrypt2W_SetEncodedIV(crypt,ivHex,L"hex");

    CkCrypt2W_putInitialCount(crypt,42);

    keyHex = L"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0";
    CkCrypt2W_SetEncodedKey(crypt,keyHex,L"hex");

    plainText = L"'Twas brillig, and the slithy toves\nDid gyre and gimble in the wabe:\nAll mimsy were the borogoves,\nAnd the mome raths outgrabe.";

    encStr = CkCrypt2W_encryptStringENC(crypt,plainText);
    wprintf(L"%s\n",encStr);

    // Now decrypt:
    decStr = CkCrypt2W_decryptStringENC(crypt,encStr);
    wprintf(L"%s\n",decStr);

    // Here is the Test Vector data copied from RFC 7539

    //  Test Vector #3:
    //  ==============
    // 
    //  Key:
    //  000  1c 92 40 a5 eb 55 d3 8a f3 33 88 86 04 f6 b5 f0  ..@..U...3......
    //  016  47 39 17 c1 40 2b 80 09 9d ca 5c bc 20 70 75 c0  G9..@+....\. pu.
    // 
    //  Nonce:
    //  000  00 00 00 00 00 00 00 00 00 00 00 02              ............
    // 
    //  Initial Block Counter = 42
    // 
    //  Plaintext:
    //  000  27 54 77 61 73 20 62 72 69 6c 6c 69 67 2c 20 61  'Twas brillig, a
    //  016  6e 64 20 74 68 65 20 73 6c 69 74 68 79 20 74 6f  nd the slithy to
    //  032  76 65 73 0a 44 69 64 20 67 79 72 65 20 61 6e 64  ves.Did gyre and
    //  048  20 67 69 6d 62 6c 65 20 69 6e 20 74 68 65 20 77   gimble in the w
    //  064  61 62 65 3a 0a 41 6c 6c 20 6d 69 6d 73 79 20 77  abe:.All mimsy w
    //  080  65 72 65 20 74 68 65 20 62 6f 72 6f 67 6f 76 65  ere the borogove
    //  096  73 2c 0a 41 6e 64 20 74 68 65 20 6d 6f 6d 65 20  s,.And the mome
    //  112  72 61 74 68 73 20 6f 75 74 67 72 61 62 65 2e     raths outgrabe.
    // 
    //  Ciphertext:
    //  000  62 e6 34 7f 95 ed 87 a4 5f fa e7 42 6f 27 a1 df  b.4....._..Bo'..
    //  016  5f b6 91 10 04 4c 0d 73 11 8e ff a9 5b 01 e5 cf  _....L.s....[...
    //  032  16 6d 3d f2 d7 21 ca f9 b2 1e 5f b1 4c 61 68 71  .m=..!...._.Lahq
    //  048  fd 84 c5 4f 9d 65 b2 83 19 6c 7f e4 f6 05 53 eb  ...O.e...l....S.
    //  064  f3 9c 64 02 c4 22 34 e3 2a 35 6b 3e 76 43 12 a6  ..d.."4.*5k>vC..
    //  080  1a 55 32 05 57 16 ea d6 96 25 68 f8 7d 3f 3f 77  .U2.W....%h.}??w
    //  096  04 c6 a8 d1 bc d1 bf 4d 50 d6 15 4b 6d a7 31 b1  .......MP..Km.1.
    //  112  87 b5 8d fd 72 8a fa 36 75 7a 79 7a c1 88 d1     ....r..6uzyz..


    CkCrypt2W_Dispose(crypt);

    }

 

© 2000-2024 Chilkat Software, Inc. All Rights Reserved.