1
mirror of https://github.com/jedisct1/libsodium.git synced 2024-12-20 02:25:14 -07:00

Demos: let prompt_input() add extra \n itself

This commit is contained in:
Frank Denis 2015-05-27 20:53:54 +02:00
parent 9b209f0078
commit a313e0be66
6 changed files with 34 additions and 40 deletions

View File

@ -45,9 +45,7 @@ auth(void)
puts("Example: crypto_auth\n");
prompt_input("a key", (char*)key, sizeof key, 0);
message_len = prompt_input("a message", (char*)message, sizeof message, 1);
putchar('\n');
printf("Generating %s authentication...\n", crypto_auth_primitive());
crypto_auth(mac, message, message_len, key);

View File

@ -61,9 +61,7 @@ generichash(void)
puts("Example: crypto_generichash\n");
key_len = prompt_input("a key", (char*)key, sizeof key, 1);
message_len = prompt_input("a message", (char*)message, sizeof message, 1);
putchar('\n');
printf("Hashing message with %s\n", crypto_generichash_primitive());
if (crypto_generichash(hash, sizeof hash, message, message_len,

View File

@ -27,7 +27,6 @@ generichash_stream(void)
puts("Example: crypto_generichashstream\n");
prompt_input("a key", (char*)key, sizeof key, 1);
putchar('\n');
printf("Hashing message with %s\n", crypto_generichash_primitive());

View File

@ -43,9 +43,7 @@ shorthash(void)
puts("Example: crypto_shorthash\n");
prompt_input("a key", (char*)key, sizeof key, 0);
message_len = prompt_input("a message", (char*)message, sizeof message, 1);
putchar('\n');
printf("Hashing the message with %s\n", crypto_shorthash_primitive());
crypto_shorthash(hash, message, message_len, key);

View File

@ -22,59 +22,60 @@
static int
sign(void)
{
unsigned char pk[crypto_sign_PUBLICKEYBYTES]; /* Bob public */
unsigned char sk[crypto_sign_SECRETKEYBYTES]; /* Bob secret */
unsigned char m[MAX_INPUT_SIZE]; /* message */
unsigned char sm[MAX_INPUT_SIZE + crypto_sign_BYTES]; /* signed message */
unsigned long long int mlen; /* message length */
unsigned long long int smlen; /* signed length */
int r;
unsigned char pk[crypto_sign_PUBLICKEYBYTES]; /* Bob's public key */
unsigned char sk[crypto_sign_SECRETKEYBYTES]; /* Bob's secret key */
unsigned char message[MAX_INPUT_SIZE];
unsigned char message_signed[crypto_sign_BYTES + MAX_INPUT_SIZE];
unsigned long long message_len;
unsigned long long message_signed_len;
int ret;
puts("Example: crypto_sign\n");
puts("Generating keypair...");
crypto_sign_keypair(pk, sk); /* generate Bob's keys */
fputs("Public: ", stdout);
fputs("Public key: ", stdout);
print_hex(pk, sizeof pk);
putchar('\n');
fputs("Secret: ", stdout);
fputs("Secret key: ", stdout);
print_hex(sk, sizeof sk);
putchar('\n');
puts("The secret key, as returned by crypto_sign_keypair(), actually includes "
"a copy of the public key, in order to avoid a scalar multiplication "
"when signing messages.");
mlen = prompt_input("a message", (char*)m, sizeof m, 1);
putchar('\n');
puts("Notice the message has no prepended padding");
print_hex(m, mlen);
putchar('\n');
message_len = prompt_input("a message", (char*)message, sizeof message, 1);
printf("Signing message with %s...\n", crypto_sign_primitive());
crypto_sign(sm, &smlen, m, mlen, sk);
crypto_sign(message_signed, &message_signed_len, message, message_len, sk);
puts("Notice the signed message has prepended signature");
print_hex(sm, smlen);
printf("Signed message:");
print_hex(message_signed, message_signed_len);
putchar('\n');
printf("A %u bytes signature was prepended to the message\n",
crypto_sign_BYTES);
fputs("Signature: ", stdout);
print_hex(sm, crypto_sign_BYTES);
print_hex(message_signed, crypto_sign_BYTES);
putchar('\n');
fputs("Message: ", stdout);
fwrite(sm + crypto_sign_BYTES, 1U, smlen - crypto_sign_BYTES, stdout);
fwrite(message_signed + crypto_sign_BYTES, 1U,
message_signed_len - crypto_sign_BYTES, stdout);
putchar('\n');
puts("Validating message...");
r = crypto_sign_open(m, &mlen, sm, smlen, pk);
print_verification(r);
if (r == 0)
printf("Message: %s\n", m);
ret = crypto_sign_open(message, &message_len, message_signed,
message_signed_len, pk);
print_verification(ret);
if (ret == 0)
printf("Message: %s\n", message);
sodium_memzero(sk, sizeof sk); /* wipe sensitive data */
sodium_memzero(m, sizeof m);
sodium_memzero(sm, sizeof sm);
sodium_memzero(message, sizeof message);
sodium_memzero(message_signed, sizeof message_signed);
return r;
return ret;
}
int

View File

@ -52,9 +52,9 @@ prompt_input(const char *prompt, char *input, const size_t max_input_len,
size_t actual_input_len;
if (variable_length != 0) {
printf("Enter %s (%zu bytes max) > ", prompt, max_input_len);
printf("\nEnter %s (%zu bytes max) > ", prompt, max_input_len);
} else {
printf("Enter %s (%zu bytes) > ", prompt, max_input_len);
printf("\nEnter %s (%zu bytes) > ", prompt, max_input_len);
}
fflush(stdout);
fgets(input_tmp, sizeof input_tmp, stdin);
@ -67,14 +67,14 @@ prompt_input(const char *prompt, char *input, const size_t max_input_len,
}
if (actual_input_len > max_input_len) {
printf("Warning: truncating input to %zu bytes\n", max_input_len);
printf("Warning: truncating input to %zu bytes\n\n", max_input_len);
actual_input_len = max_input_len;
} else if (actual_input_len < max_input_len && variable_length == 0) {
printf("Warning: %zu bytes expected, %zu bytes given: padding with zeros\n",
printf("Warning: %zu bytes expected, %zu bytes given: padding with zeros\n\n",
max_input_len, actual_input_len);
memset(input, 0, max_input_len);
} else {
printf("Length: %zu bytes\n", actual_input_len);
printf("Length: %zu bytes\n\n", actual_input_len);
}
memcpy(input, input_tmp, actual_input_len);