Changeset 137
- Timestamp:
- 05/20/05 15:10:24
- Files:
-
- openpgpsdk/trunk/examples/Makefile.template (modified) (1 diff)
- openpgpsdk/trunk/include/memory.h (modified) (1 diff)
- openpgpsdk/trunk/src/build.c (modified) (2 diffs)
- openpgpsdk/trunk/src/create.c (modified) (4 diffs)
- openpgpsdk/trunk/src/memory.c (modified) (3 diffs)
- openpgpsdk/trunk/src/signature.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
openpgpsdk/trunk/examples/Makefile.template
r136 r137 8 8 LIBS=$(LIBDEPS) -lcrypto -lz $(DM_LIB) 9 9 10 all: Makefile .depend packet-dump verify create-key create-signed-key 10 all: Makefile lib .depend packet-dump verify create-key create-signed-key 11 12 lib: 13 cd ../src && make 11 14 12 15 packet-dump: packet-dump.o $(LIBDEPS) openpgpsdk/trunk/include/memory.h
r136 r137 19 19 void ops_memory_pad(ops_memory_t *mem,size_t length); 20 20 void ops_memory_add(ops_memory_t *mem,const unsigned char *src,size_t length); 21 void ops_memory_add_int(ops_memory_t *mem,unsigned n,size_t length);22 21 void ops_memory_place_int(ops_memory_t *mem,unsigned offset,unsigned n, 23 22 size_t length); 24 void ops_memory_add_mpi(ops_memory_t *out,const BIGNUM *bn);25 23 void ops_memory_make_packet(ops_memory_t *out,ops_content_tag_t tag); 26 24 void ops_memory_release(ops_memory_t *mem); openpgpsdk/trunk/src/build.c
r136 r137 10 10 #include <string.h> 11 11 12 // XXX: move this to memory.c? 12 13 void ops_memory_make_packet(ops_memory_t *out,ops_content_tag_t tag) 13 14 { … … 44 45 out->length+=extra+1; 45 46 } 46 47 // XXX: this should be refactored into a write48 void ops_build_public_key(ops_memory_t *out,const ops_public_key_t *key,49 ops_boolean_t make_packet)50 {51 ops_memory_init(out,128);52 ops_memory_add_int(out,key->version,1);53 ops_memory_add_int(out,key->creation_time,4);54 if(key->version != 4)55 ops_memory_add_int(out,key->days_valid,2);56 ops_memory_add_int(out,key->algorithm,1);57 58 switch(key->algorithm)59 {60 case OPS_PKA_DSA:61 ops_memory_add_mpi(out,key->key.dsa.p);62 ops_memory_add_mpi(out,key->key.dsa.q);63 ops_memory_add_mpi(out,key->key.dsa.g);64 ops_memory_add_mpi(out,key->key.dsa.y);65 break;66 67 case OPS_PKA_RSA:68 case OPS_PKA_RSA_ENCRYPT_ONLY:69 case OPS_PKA_RSA_SIGN_ONLY:70 ops_memory_add_mpi(out,key->key.rsa.n);71 ops_memory_add_mpi(out,key->key.rsa.e);72 break;73 74 case OPS_PKA_ELGAMAL:75 ops_memory_add_mpi(out,key->key.elgamal.p);76 ops_memory_add_mpi(out,key->key.elgamal.g);77 ops_memory_add_mpi(out,key->key.elgamal.y);78 break;79 }80 81 if(make_packet)82 ops_memory_make_packet(out,OPS_PTAG_CT_PUBLIC_KEY);83 }openpgpsdk/trunk/src/create.c
r136 r137 4 4 #include "create.h" 5 5 #include "util.h" 6 #include "build.h" 6 7 #include <string.h> 7 8 #include <assert.h> … … 125 126 } 126 127 128 // Note that we support v3 keys here because they're needed for 129 // for verification - the writer doesn't allow them, though 130 static int write_public_key_body(const ops_public_key_t *key, 131 ops_create_options_t *opt) 132 { 133 if(!(ops_write_scalar(key->version,1,opt) 134 && ops_write_scalar(key->creation_time,4,opt))) 135 return ops_false; 136 137 if(key->version != 4 && !ops_write_scalar(key->days_valid,2,opt)) 138 return ops_false; 139 140 if(!ops_write_scalar(key->algorithm,1,opt)) 141 return ops_false; 142 143 switch(key->algorithm) 144 { 145 case OPS_PKA_DSA: 146 return ops_write_mpi(key->key.dsa.p,opt) 147 && ops_write_mpi(key->key.dsa.q,opt) 148 && ops_write_mpi(key->key.dsa.g,opt) 149 && ops_write_mpi(key->key.dsa.y,opt); 150 151 case OPS_PKA_RSA: 152 case OPS_PKA_RSA_ENCRYPT_ONLY: 153 case OPS_PKA_RSA_SIGN_ONLY: 154 return ops_write_mpi(key->key.rsa.n,opt) 155 && ops_write_mpi(key->key.rsa.e,opt); 156 157 case OPS_PKA_ELGAMAL: 158 return ops_write_mpi(key->key.elgamal.p,opt) 159 && ops_write_mpi(key->key.elgamal.g,opt) 160 && ops_write_mpi(key->key.elgamal.y,opt); 161 162 default: 163 assert(0); 164 break; 165 } 166 167 /* not reached */ 168 return ops_false; 169 } 170 127 171 ops_boolean_t ops_write_struct_public_key(const ops_public_key_t *key, 128 172 ops_create_options_t *opt) … … 130 174 assert(key->version == 4); 131 175 132 if(!(ops_write_ptag(OPS_PTAG_CT_PUBLIC_KEY,opt) 133 && ops_write_length(1+4+1+public_key_length(key),opt) 134 && ops_write_scalar(key->version,1,opt) 135 && ops_write_scalar(key->creation_time,4,opt) 136 && ops_write_scalar(key->algorithm,1,opt))) 137 return ops_false; 138 139 switch(key->algorithm) 140 { 141 case OPS_PKA_RSA: 142 return ops_write_mpi(key->key.rsa.n,opt) 143 && ops_write_mpi(key->key.rsa.e,opt); 144 145 default: 146 assert(!"unknown key algorithm"); 147 } 148 149 /* not reached */ 150 return ops_false; 176 return ops_write_ptag(OPS_PTAG_CT_PUBLIC_KEY,opt) 177 && ops_write_length(1+4+1+public_key_length(key),opt) 178 && write_public_key_body(key,opt); 151 179 } 152 180 … … 161 189 return ops_write_struct_public_key(&key,opt); 162 190 } 191 192 void ops_build_public_key(ops_memory_t *out,const ops_public_key_t *key, 193 ops_boolean_t make_packet) 194 { 195 ops_create_options_t opt; 196 197 ops_memory_init(out,128); 198 opt.writer=ops_writer_memory; 199 opt.arg=out; 200 201 write_public_key_body(key,&opt); 202 203 if(make_packet) 204 ops_memory_make_packet(out,OPS_PTAG_CT_PUBLIC_KEY); 205 } openpgpsdk/trunk/src/memory.c
r136 r137 46 46 } 47 47 48 void ops_memory_add_int(ops_memory_t *mem,unsigned n,size_t length) 49 { 50 unsigned char c[1]; 51 52 while(length--) 53 { 54 c[0]=n >> (length*8); 55 ops_memory_add(mem,c,1); 56 } 57 } 58 48 // XXX: this could be refactored via the writer, but an awful lot of 49 // hoops to jump through for 2 lines of code! 59 50 void ops_memory_place_int(ops_memory_t *mem,unsigned offset,unsigned n, 60 51 size_t length) … … 64 55 while(length--) 65 56 mem->buf[offset++]=n >> (length*8); 66 }67 68 void ops_memory_add_mpi(ops_memory_t *out,const BIGNUM *bn)69 {70 unsigned length=BN_num_bits(bn);71 unsigned char buf[8192];72 73 assert(length <= 65535);74 BN_bn2bin(bn,buf);75 ops_memory_add_int(out,length,2);76 ops_memory_add(out,buf,(length+7)/8);77 57 } 78 58 … … 91 71 return OPS_W_OK; 92 72 } 93 openpgpsdk/trunk/src/signature.c
r136 r137 241 241 { 242 242 // XXX: refactor with check (in several ways - check should probably 243 // use the buffered writer to construct packets , and also should243 // use the buffered writer to construct packets (done), and also should 244 244 // share code for hash calculation) 245 245 sig->sig.version=OPS_SIG_V4;
