AJ_Status AJ_BigEndianEncodeCertificate(AJ_Certificate* certificate, uint8_t* b8, size_t b8len) { if (b8len < sizeof (uint32_t)) { /* Require at least a version */ return AJ_ERR_RESOURCES; } HostU32ToBigEndianU8(&certificate->version, sizeof (uint32_t), b8); b8 += sizeof (uint32_t); CertificateSize(certificate); if (b8len < certificate->size) { return AJ_ERR_RESOURCES; } AJ_BigEndianEncodePublicKey(&certificate->issuer, b8); b8 += sizeof (ecc_publickey); switch (certificate->version) { case 1: case 2: AJ_BigEndianEncodePublicKey(&certificate->subject, b8); b8 += sizeof (ecc_publickey); HostU64ToBigEndianU8(&certificate->validity.validfrom, sizeof (uint64_t), b8); b8 += sizeof (uint64_t); HostU64ToBigEndianU8(&certificate->validity.validto, sizeof (uint64_t), b8); b8 += sizeof (uint64_t); *b8 = certificate->delegate; b8 += sizeof (uint8_t); break; } switch (certificate->version) { case 2: memcpy(b8, certificate->guild, AJ_GUID_LENGTH); b8 += AJ_GUID_LENGTH; break; } memcpy(b8, certificate->digest, SHA256_DIGEST_LENGTH); b8 += SHA256_DIGEST_LENGTH; HostU32ToBigEndianU8((uint32_t*) &certificate->signature, sizeof (ecc_signature), b8); b8 += sizeof (ecc_signature); return AJ_OK; }
AJ_Status AJ_BigEndianEncodePublicKey(ecc_publickey* publickey, uint8_t* b8) { HostU32ToBigEndianU8((uint32_t*) publickey, sizeof (ecc_publickey), b8); return AJ_OK; }
AJ_Status AJ_BigEndianEncodePrivateKey(ecc_privatekey* privatekey, uint8_t* b8) { HostU32ToBigEndianU8((uint32_t*) privatekey, sizeof (ecc_privatekey), b8); return AJ_OK; }
void AJ_BigEndianEncodePublicKey(ecc_publickey* publickey, uint8_t* b8) { HostU32ToBigEndianU8((uint32_t*) publickey, sizeof (ecc_publickey), b8); }