1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
  
30
  
31
  
32
  
33
  
34
  
35
  
36
  
37
  
38
  
39
  
40
  
41
  
42
  
43
  
//! Handling of Certifikate Signing Requests (PKCS-10) 
 
#pike __REAL_VERSION__ 
// #pragma strict_types 
 
#if constant(Crypto.RSA) 
 
import Standards.ASN1.Types; 
 
class CSR_Attributes 
{ 
  inherit .Certificate.Attributes; 
  constant cls = 2; 
  constant tag = 0; 
} 
 
//! 
Sequence build_csr(Crypto.RSA rsa, object name, 
                   mapping(string:array(object)) attributes) 
{ 
  Sequence info = Sequence( ({ Integer(0), name, 
                               .RSA.build_public_key(rsa), 
                               CSR_Attributes(.Identifiers.attribute_ids, 
                                              attributes) }) ); 
  return Sequence( ({ info, 
                      Sequence( 
                               ({ .Identifiers.rsa_md5_id, Null() }) ), 
                      BitString(rsa->pkcs_sign(info->get_der(), 
                                               Crypto.MD5)) }) ); 
} 
 
#if 0 
object build_csr_dsa(Crypto.DSA dsa, object name) 
{ 
  Sequence info = Sequence( ({ Integer }) ); 
} 
#endif 
 
#else 
constant this_program_does_not_exist=1; 
#endif