Overview
Comment: | Add AES256-CTR Tcl command |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | monocypher |
Files: | files | file ages | folders |
SHA3-256: |
ed43f190761dc9c0c272c80ff59f6270 |
User & Date: | rkeene on 2019-01-11 15:53:11 |
Other Links: | branch diff | manifest | tags |
Context
2019-01-11
| ||
16:08 | Removed all heap-based memory allocations since they can be done on the stack now that they are constant sized check-in: 567d112dc6 user: rkeene tags: monocypher | |
15:53 | Add AES256-CTR Tcl command check-in: ed43f19076 user: rkeene tags: monocypher | |
2019-01-10
| ||
21:14 | Compile AES as AES256 CTR check-in: 4131055ef7 user: rkeene tags: monocypher | |
Changes
Modified nano.c from [aa5532a5f2] to [8a374b97c9].
︙ | ︙ | |||
10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #ifdef NANO_TCL_HAVE_OPENMP # include <omp.h> #endif #include "randombytes.h" #include "monocypher.h" #include "argon2.h" #define NANO_SECRET_KEY_LENGTH 32 #define NANO_PUBLIC_KEY_LENGTH 32 #define NANO_BLOCK_HASH_LENGTH 32 #define NANO_BLOCK_SIGNATURE_LENGTH 64 #define NANO_WORK_VALUE_LENGTH 8 #define NANO_WORK_HASH_LENGTH 8 | > | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #ifdef NANO_TCL_HAVE_OPENMP # include <omp.h> #endif #include "randombytes.h" #include "monocypher.h" #include "argon2.h" #include "aes.h" #define NANO_SECRET_KEY_LENGTH 32 #define NANO_PUBLIC_KEY_LENGTH 32 #define NANO_BLOCK_HASH_LENGTH 32 #define NANO_BLOCK_SIGNATURE_LENGTH 64 #define NANO_WORK_VALUE_LENGTH 8 #define NANO_WORK_HASH_LENGTH 8 |
︙ | ︙ | |||
315 316 317 318 319 320 321 322 323 324 325 326 327 328 | Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(result, sizeof(result))); return(TCL_OK); /* NOTREACH */ clientData = clientData; } static int nano_tcl_hash_data(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { unsigned char *data, result[NANO_BLOCK_SIGNATURE_LENGTH]; int tgifo_ret; int data_length, result_length; if (objc < 2 || objc > 3) { | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 | Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(result, sizeof(result))); return(TCL_OK); /* NOTREACH */ clientData = clientData; } static int nano_tcl_aes256_ctr(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { struct AES_ctx aes_handle; void *key, *iv, *data; int key_length, iv_length, data_length; unsigned char result[128]; if (objc != 4) { Tcl_WrongNumArgs(interp, 1, objv, "key iv data"); return(TCL_ERROR); } key = Tcl_GetByteArrayFromObj(objv[1], &key_length); iv = Tcl_GetByteArrayFromObj(objv[2], &iv_length); data = Tcl_GetByteArrayFromObj(objv[3], &data_length); if (key_length != AES_KEYLEN) { Tcl_SetResult(interp, "Key is not the right size", NULL); return(TCL_ERROR); } if (iv_length != AES_BLOCKLEN) { Tcl_SetResult(interp, "IV is not the right size", NULL); return(TCL_ERROR); } if (data_length > sizeof(result)) { Tcl_SetResult(interp, "Data exceeds maximum size", NULL); return(TCL_ERROR); } memcpy(result, data, data_length); AES_init_ctx_iv(&aes_handle, key, iv); AES_CTR_xcrypt_buffer(&aes_handle, result, data_length); Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(result, AES_KEYLEN)); return(TCL_OK); /* NOTREACH */ clientData = clientData; } static int nano_tcl_hash_data(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { unsigned char *data, result[NANO_BLOCK_SIGNATURE_LENGTH]; int tgifo_ret; int data_length, result_length; if (objc < 2 || objc > 3) { |
︙ | ︙ | |||
607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 | TclNano_CreateObjCommand(interp, "::nano::internal::generateKey", nano_tcl_generate_keypair); TclNano_CreateObjCommand(interp, "::nano::internal::generateSeed", nano_tcl_generate_seed); TclNano_CreateObjCommand(interp, "::nano::internal::publicKey", nano_tcl_secret_key_to_public_key); TclNano_CreateObjCommand(interp, "::nano::internal::signDetached", nano_tcl_sign_detached); TclNano_CreateObjCommand(interp, "::nano::internal::verifyDetached", nano_tcl_verify_detached); TclNano_CreateObjCommand(interp, "::nano::internal::hashData", nano_tcl_hash_data); TclNano_CreateObjCommand(interp, "::nano::internal::deriveKeyFromPassword", nano_tcl_derive_key_from_password); TclNano_CreateObjCommand(interp, "::nano::internal::validateWork", nano_tcl_validate_work); TclNano_CreateObjCommand(interp, "::nano::internal::generateWork", nano_tcl_generate_work); TclNano_CreateObjCommand(interp, "::nano::internal::randomBytes", nano_tcl_random_bytes); TclNano_Eval(interp, nanoInitScript); TclNano_PkgProvide(interp, "nano", PACKAGE_VERSION); return(TCL_OK); } | > | 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 | TclNano_CreateObjCommand(interp, "::nano::internal::generateKey", nano_tcl_generate_keypair); TclNano_CreateObjCommand(interp, "::nano::internal::generateSeed", nano_tcl_generate_seed); TclNano_CreateObjCommand(interp, "::nano::internal::publicKey", nano_tcl_secret_key_to_public_key); TclNano_CreateObjCommand(interp, "::nano::internal::signDetached", nano_tcl_sign_detached); TclNano_CreateObjCommand(interp, "::nano::internal::verifyDetached", nano_tcl_verify_detached); TclNano_CreateObjCommand(interp, "::nano::internal::hashData", nano_tcl_hash_data); TclNano_CreateObjCommand(interp, "::nano::internal::deriveKeyFromPassword", nano_tcl_derive_key_from_password); TclNano_CreateObjCommand(interp, "::nano::internal::AES256-CTR", nano_tcl_aes256_ctr); TclNano_CreateObjCommand(interp, "::nano::internal::validateWork", nano_tcl_validate_work); TclNano_CreateObjCommand(interp, "::nano::internal::generateWork", nano_tcl_generate_work); TclNano_CreateObjCommand(interp, "::nano::internal::randomBytes", nano_tcl_random_bytes); TclNano_Eval(interp, nanoInitScript); TclNano_PkgProvide(interp, "nano", PACKAGE_VERSION); return(TCL_OK); } |