Pitney Bowes' MapInfo Sea Chart format
application/octet-stream
Magic Bytes
Offset: 0
21 0D 0A 43 52 52 2F 54 68 69 73 20 65 6C 65 63 74 72 6F 6E 69 63 20 63 68 61 72 74 20 77 61 73 20 70 72 6F 64 75 63 65 64 20 75 6E 64 65 72 20 74 68 65 20 61 75 74 68 6F 72 69 74 79 20 6F 66 20 55 53 41 2D 4E 4F 41 41 2F 4E 4F 53 2E 0D 0A
The MapInfo Sea Chart format is a raster-based geospatial file type developed by Pitney Bowes and MapTech for digital nautical navigation. It functions as a header for Raster Navigational Charts, enabling marine software and Geographic Information Systems to display hydrographic data and maritime boundaries. Although largely considered a legacy format replaced by modern vector standards, it poses minimal security risk because the files contain only static metadata and do not support executable code.
Validation Code
How to validate .bsb files in Python
Python
def is_bsb(file_path: str) -> bool:
"""Check if file is a valid BSB by magic bytes."""
signature = bytes([0x21, 0x0D, 0x0A, 0x43, 0x52, 0x52, 0x2F, 0x54, 0x68, 0x69, 0x73, 0x20, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x72, 0x6F, 0x6E, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x75, 0x6E, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x20, 0x6F, 0x66, 0x20, 0x55, 0x53, 0x41, 0x2D, 0x4E, 0x4F, 0x41, 0x41, 0x2F, 0x4E, 0x4F, 0x53, 0x2E, 0x0D, 0x0A])
with open(file_path, "rb") as f:
return f.read(80) == signature
How to validate .bsb files in Node.js
Node.js
function isBSB(buffer: Buffer): boolean {
const signature = Buffer.from([0x21, 0x0D, 0x0A, 0x43, 0x52, 0x52, 0x2F, 0x54, 0x68, 0x69, 0x73, 0x20, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x72, 0x6F, 0x6E, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x75, 0x6E, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x20, 0x6F, 0x66, 0x20, 0x55, 0x53, 0x41, 0x2D, 0x4E, 0x4F, 0x41, 0x41, 0x2F, 0x4E, 0x4F, 0x53, 0x2E, 0x0D, 0x0A]);
return buffer.subarray(0, 80).equals(signature);
}
Go
func IsBSB(data []byte) bool {
signature := []byte{0x21, 0x0D, 0x0A, 0x43, 0x52, 0x52, 0x2F, 0x54, 0x68, 0x69, 0x73, 0x20, 0x65, 0x6C, 0x65, 0x63, 0x74, 0x72, 0x6F, 0x6E, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x75, 0x6E, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, 0x20, 0x6F, 0x66, 0x20, 0x55, 0x53, 0x41, 0x2D, 0x4E, 0x4F, 0x41, 0x41, 0x2F, 0x4E, 0x4F, 0x53, 0x2E, 0x0D, 0x0A}
if len(data) < 80 {
return false
}
return bytes.Equal(data[:80], signature)
}
API Endpoint
GET
/api/v1/bsb
curl https://filesignature.org/api/v1/bsb