internal ScannableFingerprint(byte[] localFingerprintData, byte[] remoteFingerprintData) { FingerprintProtos.LogicalFingerprint localFingerprint = FingerprintProtos.LogicalFingerprint.CreateBuilder() .SetContent(ByteString.CopyFrom(ByteUtil.Trim(localFingerprintData, 32))) .Build(); FingerprintProtos.LogicalFingerprint remoteFingerprint = FingerprintProtos.LogicalFingerprint.CreateBuilder() .SetContent(ByteString.CopyFrom(ByteUtil.Trim(remoteFingerprintData, 32))) .Build(); _fingerprints = FingerprintProtos.CombinedFingerprints.CreateBuilder() .SetVersion((uint)Version) .SetLocalFingerprint(localFingerprint) .SetRemoteFingerprint(remoteFingerprint) .Build(); }
/** * Compare a scanned QR code with what we expect. * * @param scannedFingerprintData The scanned data * @return True if matching, otehrwise false. * @throws FingerprintVersionMismatchException if the scanned fingerprint is the wrong version. * @throws FingerprintIdentifierMismatchException if the scanned fingerprint is for the wrong stable identifier. */ public bool CompareTo(byte[] scannedFingerprintData) /* throws FingerprintVersionMismatchException, * FingerprintIdentifierMismatchException, * FingerprintParsingException */ { try { FingerprintProtos.CombinedFingerprints scanned = FingerprintProtos.CombinedFingerprints.ParseFrom(scannedFingerprintData); if (!scanned.HasRemoteFingerprint || !scanned.HasLocalFingerprint || !scanned.HasVersion || scanned.Version != _fingerprints.Version) { throw new FingerprintVersionMismatchException((int)scanned.Version, Version); } return(ByteUtil.IsEqual(_fingerprints.LocalFingerprint.Content.ToByteArray(), scanned.RemoteFingerprint.Content.ToByteArray()) && ByteUtil.IsEqual(_fingerprints.RemoteFingerprint.Content.ToByteArray(), scanned.LocalFingerprint.Content.ToByteArray())); } catch (InvalidProtocolBufferException e) { throw new FingerprintParsingException(e); } }