tor  0.4.1.0-alpha-dev
Functions
crypto_format.c File Reference
#include "orconfig.h"
#include "lib/container/smartlist.h"
#include "lib/crypt_ops/crypto_curve25519.h"
#include "lib/crypt_ops/crypto_digest.h"
#include "lib/crypt_ops/crypto_ed25519.h"
#include "lib/crypt_ops/crypto_format.h"
#include "lib/crypt_ops/crypto_util.h"
#include "lib/string/compat_string.h"
#include "lib/string/util_string.h"
#include "lib/string/printf.h"
#include "lib/encoding/binascii.h"
#include "lib/log/log.h"
#include "lib/log/util_bug.h"
#include "lib/fs/files.h"
#include <string.h>
#include <errno.h>

Go to the source code of this file.

Functions

int crypto_write_tagged_contents_to_file (const char *fname, const char *typestring, const char *tag, const uint8_t *data, size_t datalen)
 
ssize_t crypto_read_tagged_contents_from_file (const char *fname, const char *typestring, char **tag_out, uint8_t *data_out, ssize_t data_out_len)
 
int curve25519_public_to_base64 (char *output, const curve25519_public_key_t *pkey)
 
int curve25519_public_from_base64 (curve25519_public_key_t *pkey, const char *input)
 
const char * ed25519_fmt (const ed25519_public_key_t *pkey)
 
int ed25519_public_from_base64 (ed25519_public_key_t *pkey, const char *input)
 
int ed25519_public_to_base64 (char *output, const ed25519_public_key_t *pkey)
 
int ed25519_signature_to_base64 (char *output, const ed25519_signature_t *sig)
 
int ed25519_signature_from_base64 (ed25519_signature_t *sig, const char *input)
 
int digest_to_base64 (char *d64, const char *digest)
 
int digest_from_base64 (char *digest, const char *d64)
 
int digest256_to_base64 (char *d64, const char *digest)
 
int digest256_from_base64 (char *digest, const char *d64)
 

Detailed Description

Formatting and parsing code for crypto-related data structures.

Definition in file crypto_format.c.

Function Documentation

◆ crypto_read_tagged_contents_from_file()

ssize_t crypto_read_tagged_contents_from_file ( const char *  fname,
const char *  typestring,
char **  tag_out,
uint8_t *  data_out,
ssize_t  data_out_len 
)

Read a tagged-data file from fname into the data_out_len-byte buffer in data_out. Check that the typestring matches typestring; store the tag into a newly allocated string in tag_out. Return -1 on failure, and the number of bytes of data on success. Preserves the errno from reading the file.

Definition at line 77 of file crypto_format.c.

References RFTS_BIN, RFTS_IGNORE_MISSING, strcmpend(), strcmpstart(), and tor_mem_is_zero().

Referenced by curve25519_keypair_read_from_file(), ed25519_pubkey_read_from_file(), and ed25519_seckey_read_from_file().

◆ crypto_write_tagged_contents_to_file()

int crypto_write_tagged_contents_to_file ( const char *  fname,
const char *  typestring,
const char *  tag,
const uint8_t *  data,
size_t  datalen 
)

Write the datalen bytes from data to the file named fname in the tagged-data format. This format contains a 32-byte header, followed by the data itself. The header is the NUL-padded string "== <b>typestring</b>: <b>tag</b> ==". The length of typestring and tag must therefore be no more than 24.

Definition at line 42 of file crypto_format.c.

◆ curve25519_public_from_base64()

int curve25519_public_from_base64 ( curve25519_public_key_t pkey,
const char *  input 
)

Try to decode a base64-encoded curve25519 public key from input into the object at pkey. Return 0 on success, -1 on failure. Accepts keys with or without a trailing "=".

Definition at line 154 of file crypto_format.c.

◆ curve25519_public_to_base64()

int curve25519_public_to_base64 ( char *  output,
const curve25519_public_key_t pkey 
)

Encode pkey as a base64-encoded string, without trailing "=" characters, in the buffer output, which must have at least CURVE25519_BASE64_PADDED_LEN+1 bytes available. Return 0 on success, -1 on failure.

Definition at line 139 of file crypto_format.c.

References base64_encode(), and CURVE25519_PUBKEY_LEN.

◆ digest256_from_base64()

int digest256_from_base64 ( char *  digest,
const char *  d64 
)

Given a base64 encoded, nul-terminated digest in d64 (without trailing newline or = characters), decode it and store the result in the first DIGEST256_LEN bytes at digest.

Definition at line 299 of file crypto_format.c.

References base64_decode(), and DIGEST256_LEN.

Referenced by ed25519_public_from_base64().

◆ digest256_to_base64()

int digest256_to_base64 ( char *  d64,
const char *  digest 
)

Base64 encode DIGEST256_LINE bytes from digest, remove the trailing = characters, and store the nul-terminated result in the first BASE64_DIGEST256_LEN+1 bytes of d64.

Definition at line 285 of file crypto_format.c.

References BASE64_DIGEST256_LEN, base64_encode(), and DIGEST256_LEN.

Referenced by ed25519_public_to_base64(), and keypin_journal_append_entry().

◆ digest_from_base64()

int digest_from_base64 ( char *  digest,
const char *  d64 
)

Given a base64 encoded, nul-terminated digest in d64 (without trailing newline or = characters), decode it and store the result in the first DIGEST_LEN bytes at digest.

Definition at line 272 of file crypto_format.c.

References base64_decode(), and DIGEST_LEN.

◆ digest_to_base64()

int digest_to_base64 ( char *  d64,
const char *  digest 
)

Base64 encode DIGEST_LINE bytes from digest, remove the trailing = characters, and store the nul-terminated result in the first BASE64_DIGEST_LEN+1 bytes of d64.

Definition at line 258 of file crypto_format.c.

References BASE64_DIGEST_LEN, base64_encode(), and DIGEST_LEN.

Referenced by keypin_journal_append_entry(), and service_desc_note_upload().

◆ ed25519_fmt()

const char* ed25519_fmt ( const ed25519_public_key_t pkey)

For logging convenience: Convert pkey to a statically allocated base64 string and return it. Not threadsafe. Format not meant to be computer-readable; it may change in the future. Subsequent calls invalidate previous returns.

Definition at line 177 of file crypto_format.c.

◆ ed25519_public_from_base64()

int ed25519_public_from_base64 ( ed25519_public_key_t pkey,
const char *  input 
)

Try to decode the string input into an ed25519 public key. On success, store the value in pkey and return 0. Otherwise return -1.

Definition at line 197 of file crypto_format.c.

References digest256_from_base64().

◆ ed25519_public_to_base64()

int ed25519_public_to_base64 ( char *  output,
const ed25519_public_key_t pkey 
)

Encode the public key pkey into the buffer at output, which must have space for ED25519_BASE64_LEN bytes of encoded key, plus one byte for a terminating NUL. Return 0 on success, -1 on failure.

Definition at line 208 of file crypto_format.c.

References digest256_to_base64().

◆ ed25519_signature_from_base64()

int ed25519_signature_from_base64 ( ed25519_signature_t sig,
const char *  input 
)

Try to decode the string input into an ed25519 signature. On success, store the value in sig and return 0. Otherwise return -1.

Definition at line 233 of file crypto_format.c.

◆ ed25519_signature_to_base64()

int ed25519_signature_to_base64 ( char *  output,
const ed25519_signature_t sig 
)

Encode the signature sig into the buffer at output, which must have space for ED25519_SIG_BASE64_LEN bytes of encoded signature, plus one byte for a terminating NUL. Return 0 on success, -1 on failure.

Definition at line 219 of file crypto_format.c.

References base64_encode_nopad().