00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include "system.h"
00029 #include "dlpk.h"
00030 #include "mp32.h"
00031 #include "debug.h"
00032
00033 int dlpk_pInit(dlpk_p* pk)
00034 {
00035 if (dldp_pInit(&pk->param) < 0)
00036 return -1;
00037
00038 mp32nzero(&pk->y);
00039
00040 return 0;
00041 }
00042
00043 int dlpk_pFree(dlpk_p* pk)
00044 {
00045
00046 if (dldp_pFree(&pk->param) < 0)
00047 return -1;
00048
00049 mp32nfree(&pk->y);
00050
00051 return 0;
00052
00053 }
00054
00055 int dlpk_pCopy(dlpk_p* dst, const dlpk_p* src)
00056 {
00057 if (dldp_pCopy(&dst->param, &src->param) < 0)
00058 return -1;
00059
00060 mp32ncopy(&dst->y, &src->y);
00061
00062 return 0;
00063 }
00064
00065 int dlpk_pEqual(const dlpk_p* a, const dlpk_p* b)
00066 {
00067 return dldp_pEqual(&a->param, &b->param) &&
00068 mp32eqx(a->y.size, a->y.data, b->y.size, b->y.data);
00069 }
00070
00071 int dlpk_pgoqValidate(const dlpk_p* pk, randomGeneratorContext* rgc, int cofactor)
00072 {
00073 register int rc = dldp_pgoqValidate(&pk->param, rgc, cofactor);
00074
00075 if (rc <= 0)
00076 return rc;
00077
00078 if (mp32leone(pk->y.size, pk->y.data))
00079 return 0;
00080
00081 if (mp32gex(pk->y.size, pk->y.data, pk->param.p.size, pk->param.p.modl))
00082 return 0;
00083
00084 return 1;
00085 }
00086
00087 int dlpk_pgonValidate(const dlpk_p* pk, randomGeneratorContext* rgc)
00088 {
00089 register int rc = dldp_pgonValidate(&pk->param, rgc);
00090
00091 if (rc <= 0)
00092 return rc;
00093
00094 if (mp32leone(pk->y.size, pk->y.data))
00095 return 0;
00096
00097 if (mp32gex(pk->y.size, pk->y.data, pk->param.p.size, pk->param.p.modl))
00098 return 0;
00099
00100 return 1;
00101 }