diff options
Diffstat (limited to 'other/fun/sign.c')
-rw-r--r-- | other/fun/sign.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/other/fun/sign.c b/other/fun/sign.c index 44485bb5..423d974a 100644 --- a/other/fun/sign.c +++ b/other/fun/sign.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* Binary signer/checker using ed25519 | 1 | /* Binary signer/checker using ed25519 |
2 | * | 2 | * |
3 | * Compile with: | 3 | * Compile with: |
4 | * gcc -o sign sign.c -lsodium | 4 | * gcc -o sign sign.c -lsodium |
5 | * | 5 | * |
@@ -60,6 +60,7 @@ int main(int argc, char *argv[]) | |||
60 | { | 60 | { |
61 | unsigned char pk[crypto_sign_ed25519_PUBLICKEYBYTES]; | 61 | unsigned char pk[crypto_sign_ed25519_PUBLICKEYBYTES]; |
62 | unsigned char sk[crypto_sign_ed25519_SECRETKEYBYTES]; | 62 | unsigned char sk[crypto_sign_ed25519_SECRETKEYBYTES]; |
63 | |||
63 | if (argc == 2 && argv[1][0] == 'g') { | 64 | if (argc == 2 && argv[1][0] == 'g') { |
64 | crypto_sign_ed25519_keypair(pk, sk); | 65 | crypto_sign_ed25519_keypair(pk, sk); |
65 | printf("Public key:\n"); | 66 | printf("Public key:\n"); |
@@ -89,12 +90,15 @@ int main(int argc, char *argv[]) | |||
89 | unsigned long long smlen; | 90 | unsigned long long smlen; |
90 | char *sm = malloc(size + crypto_sign_ed25519_BYTES * 2); | 91 | char *sm = malloc(size + crypto_sign_ed25519_BYTES * 2); |
91 | crypto_sign_ed25519(sm, &smlen, data, size, secret_key); | 92 | crypto_sign_ed25519(sm, &smlen, data, size, secret_key); |
93 | |||
92 | if (smlen - size != crypto_sign_ed25519_BYTES) | 94 | if (smlen - size != crypto_sign_ed25519_BYTES) |
93 | goto fail; | 95 | goto fail; |
96 | |||
94 | FILE *f = fopen(argv[4], "wb"); | 97 | FILE *f = fopen(argv[4], "wb"); |
95 | 98 | ||
96 | if (f == NULL) | 99 | if (f == NULL) |
97 | goto fail; | 100 | goto fail; |
101 | |||
98 | memcpy(sm + smlen, sm, crypto_sign_ed25519_BYTES); // Move signature from beginning to end of file. | 102 | memcpy(sm + smlen, sm, crypto_sign_ed25519_BYTES); // Move signature from beginning to end of file. |
99 | 103 | ||
100 | if (fwrite(sm + (smlen - size), 1, smlen, f) != smlen) | 104 | if (fwrite(sm + (smlen - size), 1, smlen, f) != smlen) |
@@ -113,7 +117,8 @@ int main(int argc, char *argv[]) | |||
113 | goto fail; | 117 | goto fail; |
114 | 118 | ||
115 | char *signe = malloc(size + crypto_sign_ed25519_BYTES); | 119 | char *signe = malloc(size + crypto_sign_ed25519_BYTES); |
116 | memcpy(signe, data + size - crypto_sign_ed25519_BYTES, crypto_sign_ed25519_BYTES); // Move signature from end to beginning of file. | 120 | memcpy(signe, data + size - crypto_sign_ed25519_BYTES, |
121 | crypto_sign_ed25519_BYTES); // Move signature from end to beginning of file. | ||
117 | memcpy(signe + crypto_sign_ed25519_BYTES, data, size - crypto_sign_ed25519_BYTES); | 122 | memcpy(signe + crypto_sign_ed25519_BYTES, data, size - crypto_sign_ed25519_BYTES); |
118 | unsigned long long smlen; | 123 | unsigned long long smlen; |
119 | char *m = malloc(size); | 124 | char *m = malloc(size); |
@@ -123,12 +128,13 @@ int main(int argc, char *argv[]) | |||
123 | printf("Failed checking sig.\n"); | 128 | printf("Failed checking sig.\n"); |
124 | goto fail; | 129 | goto fail; |
125 | } | 130 | } |
131 | |||
126 | printf("Checked successfully.\n"); | 132 | printf("Checked successfully.\n"); |
127 | } | 133 | } |
128 | 134 | ||
129 | return 0; | 135 | return 0; |
130 | 136 | ||
131 | fail: | 137 | fail: |
132 | printf("FAIL\n"); | 138 | printf("FAIL\n"); |
133 | return 1; | 139 | return 1; |
134 | } | 140 | } |