0x850 bytes of data
u16 update counter
u16 checksum
checksum: crc-ccitt (16 bit) over the 0x850 range
encryption seed: last 4 bytes of the 0x850 bytes (the only thing that isn't encrypted!)
encryption method: 32bit lcrng, same used for Pokemon encryption, xor (result >> 16).
The internal structure should be pretty easy to figure out if you just compare it to PokeStock's display. Something like u16 Species, u16 Move.
A species' level is static, determined by a table stored in the ROM (NARC file) afaik.
The one save file I checked had it at 0x22A00, must have been B2W2 (not BW).