extract PGP identity and fingerprint (as supplied by x/crypto/openpgp)
This commit is contained in:
		
							parent
							
								
									56c267c66e
								
							
						
					
					
						commit
						b87ec44b3c
					
				|  | @ -16,6 +16,12 @@ type ExifImage struct { | |||
| 	ExifTags []ExifTag `json:"exifTags"` | ||||
| } | ||||
| 
 | ||||
| type PGPKey struct { | ||||
| 	ArmoredKey  string `json:"armoredKey"` | ||||
| 	Identity    string `json:"identity"` | ||||
| 	FingerPrint string `json:"fingerprint"` | ||||
| } | ||||
| 
 | ||||
| type OnionScanReport struct { | ||||
| 	HiddenService string `json:"hiddenService"` | ||||
| 
 | ||||
|  | @ -43,7 +49,7 @@ type OnionScanReport struct { | |||
| 	ExifImages                []ExifImage       `json:"exifImages"` | ||||
| 	InterestingFiles          []string          `json:"interestingFiles"` | ||||
| 	PageReferencedDirectories []string          `json:"pageReferencedDirectories"` | ||||
| 	PGPKeys                   []string          `json:"pgpKeys"` | ||||
| 	PGPKeys                   []PGPKey          `json:"pgpKeys"` | ||||
| 	Hashes                    []string          `json:"hashes"` | ||||
| 	Snapshot                  string            `json:"snapshot"` | ||||
| 	PageTitle                 string            `json:"pageTitle"` | ||||
|  | @ -105,9 +111,9 @@ func (osr *OnionScanReport) AddInternalPage(site string) { | |||
| 	utils.RemoveDuplicates(&osr.InternalPages) | ||||
| } | ||||
| 
 | ||||
| func (osr *OnionScanReport) AddPGPKey(key string) { | ||||
| 	osr.PGPKeys = append(osr.PGPKeys, key) | ||||
| 	utils.RemoveDuplicates(&osr.PGPKeys) | ||||
| func (osr *OnionScanReport) AddPGPKey(armoredKey, identity, fingerprint string) { | ||||
| 	osr.PGPKeys = append(osr.PGPKeys, PGPKey{armoredKey, identity, fingerprint}) | ||||
| 	//TODO map of fingerprint:PGPKeys? and  utils.RemoveDuplicates(&osr.PGPKeys)
 | ||||
| } | ||||
| 
 | ||||
| func (osr *OnionScanReport) AddResponseHeader(name string, value string) { | ||||
|  |  | |||
|  | @ -1,19 +1,40 @@ | |||
| package scans | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"github.com/s-rah/onionscan/report" | ||||
| 	"golang.org/x/crypto/openpgp" | ||||
| 	"log" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| type PGPContentScan struct { | ||||
| } | ||||
| 
 | ||||
| func (cs *PGPContentScan) ScanContent(content string, report *report.OnionScanReport) { | ||||
| 	log.Printf("\tScanning for PGP Key\n") | ||||
| 	log.Printf("Scanning for PGP Key\n") | ||||
| 	pgpRegexp := regexp.MustCompile("-----BEGIN PGP PUBLIC KEY BLOCK-----((?s).*)-----END PGP PUBLIC KEY BLOCK-----") | ||||
| 	foundPGP := pgpRegexp.FindAllString(content, -1) | ||||
| 	for _, key := range foundPGP { | ||||
| 		report.AddPGPKey(key) | ||||
| 	for _, keyString := range foundPGP { | ||||
| 		keys, err := openpgp.ReadArmoredKeyRing(strings.NewReader(keyString)) | ||||
| 		if err != nil { | ||||
| 			log.Printf("ERROR: %s\n", err) | ||||
| 			continue | ||||
| 		} | ||||
| 		if len(keys) < 1 || len(keys[0].Subkeys) < 1 || len(keys[0].Identities) < 1 { | ||||
| 			log.Printf("ERROR: failed to accept key\n") | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		var identity string | ||||
| 		for identity = range keys[0].Identities { | ||||
| 			break | ||||
| 		} | ||||
| 		var fingerprint string | ||||
| 		fingerprint = fmt.Sprintf("%X", keys[0].Subkeys[0].PublicKey.Fingerprint) | ||||
| 		log.Printf("\tFound PGP Key fingerprint: %s belonging to %s", fingerprint, identity) | ||||
| 
 | ||||
| 		report.AddPGPKey(keyString, identity, fingerprint) | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue