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