3 #include "crypto_secretbox.h"
5 string
crypto_secretbox_open(const string
&c
,const string
&n
,const string
&k
)
7 if (k
.size() != crypto_secretbox_KEYBYTES
) throw "incorrect key length";
8 if (n
.size() != crypto_secretbox_NONCEBYTES
) throw "incorrect nonce length";
9 size_t clen
= c
.size() + crypto_secretbox_BOXZEROBYTES
;
10 unsigned char cpad
[clen
];
11 for (int i
= 0;i
< crypto_secretbox_BOXZEROBYTES
;++i
) cpad
[i
] = 0;
12 for (int i
= crypto_secretbox_BOXZEROBYTES
;i
< clen
;++i
) cpad
[i
] = c
[i
- crypto_secretbox_BOXZEROBYTES
];
13 unsigned char mpad
[clen
];
14 if (crypto_secretbox_open(mpad
,cpad
,clen
,(const unsigned char *) n
.c_str(),(const unsigned char *) k
.c_str()) != 0)
15 throw "ciphertext fails verification";
16 if (clen
< crypto_secretbox_ZEROBYTES
)
17 throw "ciphertext too short"; // should have been caught by _open
19 (char *) mpad
+ crypto_secretbox_ZEROBYTES
,
20 clen
- crypto_secretbox_ZEROBYTES