forked from hush/hush3
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.9 KiB
84 lines
2.9 KiB
// Copyright (c) 2016-2020 The Hush developers
|
|
/******************************************************************************
|
|
* Copyright © 2014-2019 The SuperNET Developers. *
|
|
* *
|
|
* See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at *
|
|
* the top-level directory of this distribution for the individual copyright *
|
|
* holder information and the developer policies on copyright and licensing. *
|
|
* *
|
|
* Unless otherwise agreed in a custom licensing agreement, no part of the *
|
|
* SuperNET software, including this file may be copied, modified, propagated *
|
|
* or distributed except according to the terms contained in the LICENSE file *
|
|
* *
|
|
* Removal or modification of this copyright notice is prohibited. *
|
|
* *
|
|
******************************************************************************/
|
|
|
|
#include "asn/Condition.h"
|
|
#include "asn/Fulfillment.h"
|
|
#include "asn/PrefixFingerprintContents.h"
|
|
#include "asn/OCTET_STRING.h"
|
|
#include "include/cJSON.h"
|
|
#include "cryptoconditions.h"
|
|
|
|
struct CCType CC_AnonType;
|
|
|
|
CC *mkAnon(const Condition_t *asnCond) {
|
|
|
|
CCType *realType = getTypeByAsnEnum(asnCond->present);
|
|
if (!realType) {
|
|
fprintf(stderr, "Unknown ASN type: %i", asnCond->present);
|
|
return 0;
|
|
}
|
|
CC *cond = cc_new(CC_Anon);
|
|
cond->conditionType = realType;
|
|
const CompoundSha256Condition_t *deets = &asnCond->choice.thresholdSha256;
|
|
memcpy(cond->fingerprint, deets->fingerprint.buf, 32);
|
|
cond->cost = deets->cost;
|
|
if (realType->getSubtypes) {
|
|
cond->subtypes = fromAsnSubtypes(deets->subtypes);
|
|
}
|
|
return cond;
|
|
}
|
|
|
|
|
|
|
|
static void anonToJSON(const CC *cond, cJSON *params) {
|
|
unsigned char *b64 = base64_encode(cond->fingerprint, 32);
|
|
cJSON_AddItemToObject(params, "fingerprint", cJSON_CreateString(b64));
|
|
free(b64);
|
|
cJSON_AddItemToObject(params, "cost", cJSON_CreateNumber(cond->cost));
|
|
cJSON_AddItemToObject(params, "subtypes", cJSON_CreateNumber(cond->subtypes));
|
|
}
|
|
|
|
|
|
static void anonFingerprint(const CC *cond, uint8_t *out) {
|
|
memcpy(out, cond->fingerprint, 32);
|
|
}
|
|
|
|
|
|
static unsigned long anonCost(const CC *cond) {
|
|
return cond->cost;
|
|
}
|
|
|
|
|
|
static uint32_t anonSubtypes(const CC *cond) {
|
|
return cond->subtypes;
|
|
}
|
|
|
|
|
|
static Fulfillment_t *anonFulfillment(const CC *cond) {
|
|
return NULL;
|
|
}
|
|
|
|
|
|
static void anonFree(CC *cond) {
|
|
}
|
|
|
|
|
|
static int anonIsFulfilled(const CC *cond) {
|
|
return 0;
|
|
}
|
|
|
|
|
|
struct CCType CC_AnonType = { -1, "(anon)", Condition_PR_NOTHING, NULL, &anonFingerprint, &anonCost, &anonSubtypes, NULL, &anonToJSON, NULL, &anonFulfillment, &anonIsFulfilled, &anonFree };
|
|
|