| 
				
			 | 
			
			
				
				@@ -24,6 +24,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); 
			 | 
		
		
	
		
			
			| 
				24
			 | 
			
				24
			 | 
			
			
				
				 #include <errno.h> 
			 | 
		
		
	
		
			
			| 
				25
			 | 
			
				25
			 | 
			
			
				
				 #include <assert.h> 
			 | 
		
		
	
		
			
			| 
				26
			 | 
			
				26
			 | 
			
			
				
				 #include <ipxe/list.h> 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				27
			 | 
			
			
				
				+#include <ipxe/base16.h> 
			 | 
		
		
	
		
			
			| 
				27
			 | 
			
				28
			 | 
			
			
				
				 #include <ipxe/asn1.h> 
			 | 
		
		
	
		
			
			| 
				28
			 | 
			
				29
			 | 
			
			
				
				 #include <ipxe/crypto.h> 
			 | 
		
		
	
		
			
			| 
				29
			 | 
			
				30
			 | 
			
			
				
				 #include <ipxe/md5.h> 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -120,14 +121,23 @@ FILE_LICENCE ( GPL2_OR_LATER ); 
			 | 
		
		
	
		
			
			| 
				120
			 | 
			
				121
			 | 
			
			
				
				  */ 
			 | 
		
		
	
		
			
			| 
				121
			 | 
			
				122
			 | 
			
			
				
				 const char * x509_name ( struct x509_certificate *cert ) { 
			 | 
		
		
	
		
			
			| 
				122
			 | 
			
				123
			 | 
			
			
				
				 	struct asn1_cursor *common_name = &cert->subject.common_name; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				124
			 | 
			
			
				
				+	struct digest_algorithm *digest = &sha1_algorithm; 
			 | 
		
		
	
		
			
			| 
				123
			 | 
			
				125
			 | 
			
			
				
				 	static char buf[64]; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				126
			 | 
			
			
				
				+	uint8_t fingerprint[ digest->digestsize ]; 
			 | 
		
		
	
		
			
			| 
				124
			 | 
			
				127
			 | 
			
			
				
				 	size_t len; 
			 | 
		
		
	
		
			
			| 
				125
			 | 
			
				128
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				126
			 | 
			
				129
			 | 
			
			
				
				 	len = common_name->len; 
			 | 
		
		
	
		
			
			| 
				127
			 | 
			
				
			 | 
			
			
				
				-	if ( len > ( sizeof ( buf ) - 1 /* NUL */ ) ) 
			 | 
		
		
	
		
			
			| 
				128
			 | 
			
				
			 | 
			
			
				
				-		len = ( sizeof ( buf ) - 1 /* NUL */ ); 
			 | 
		
		
	
		
			
			| 
				129
			 | 
			
				
			 | 
			
			
				
				-	memcpy ( buf, common_name->data, len ); 
			 | 
		
		
	
		
			
			| 
				130
			 | 
			
				
			 | 
			
			
				
				-	buf[len] = '\0'; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				130
			 | 
			
			
				
				+	if ( len ) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				131
			 | 
			
			
				
				+		/* Certificate has a commonName: use that */ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				132
			 | 
			
			
				
				+		if ( len > ( sizeof ( buf ) - 1 /* NUL */ ) ) 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				133
			 | 
			
			
				
				+			len = ( sizeof ( buf ) - 1 /* NUL */ ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				134
			 | 
			
			
				
				+		memcpy ( buf, common_name->data, len ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				135
			 | 
			
			
				
				+		buf[len] = '\0'; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				136
			 | 
			
			
				
				+	} else { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				137
			 | 
			
			
				
				+		/* Certificate has no commonName: use SHA-1 fingerprint */ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				138
			 | 
			
			
				
				+		x509_fingerprint ( cert, digest, fingerprint ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				139
			 | 
			
			
				
				+		base16_encode ( fingerprint, sizeof ( fingerprint ), buf ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				140
			 | 
			
			
				
				+	} 
			 | 
		
		
	
		
			
			| 
				131
			 | 
			
				141
			 | 
			
			
				
				 	return buf; 
			 | 
		
		
	
		
			
			| 
				132
			 | 
			
				142
			 | 
			
			
				
				 } 
			 | 
		
		
	
		
			
			| 
				133
			 | 
			
				143
			 | 
			
			
				
				  
			 |