Cyclic3's guide to CipheyCore (Python side) - Ciphey/CipheyCore GitHub Wiki
Python interface structure (or lack thereof)
All of the functions exposed to python have their C++ version in the main interface header, located at include/ciphey/swig.hpp. The type conversion should be fairly intuitive (bytes_*_t convert to/from python's bytes, string_*_t convert to/from python's string), but if you need more detail, check out the headers ending in .swig.hxx in include/ciphey and the basic type aliases at include/ciphey/typemaps.hpp to see the implementation of the other types, as well as the typemaps in the swig configuration file.
Stats
All of the statistical functions exposed to python are done so through the main interface header.
Frequency analysis can be performed with the analyse_bytes and analyse_string functions, the latter of which also accepts a domain argument, to allow filtering out of characters. Analysis can also be split into bins that loop for every n characters (used in Vigenere analysis) by providing the window_size argument.
There also exist functions for multi-part analysis, for when processing all of the input at one time is unfeasible. Call the start_analysis function to obtain an empty analysis object, and pass the string segments to continue_analysis
The fuzz function generates text from the given sample distribution, which is useful in creating values similar to the junk candidates from a Vigenere cracker for the use of testing Checkers.
The chisq_test performs a goodness of fit (techincally a G-test in newer versions) for the given analysis object against an expected frequency distribution, returning a probability indicating the likelihood that such a deviant sample would appear.
The info_content function attempts to determine the Shannon entropy of a given bytes object. Unlike similar implementations, the info_content function attempts to determine the word size (currently limited to the bit lengths {1, 2, 4, 8}) that gives the highest value, in an attempt to determine sub-byte patterns.
Cryptography
I'll give a brief overview of the functions common to the ciphers:
A *_crack function exists for each cipher, which returns a list of candidates that yield a plaintext that scores at least p_value or more from the goodness of fit test against expected.
*_decrypt and *_encrypt functions, well, erm, decrypt and encrypt using the cipher.
*_detect attempts to determine the likelihood that a given ciphertext was created using the cipher.
Other cipher-specific functions include functions to attempt to guess the length of the key.
AuSearch
This heaving pile of rubbish tries to optimise the search order for Ciphey. It does this in like the least efficient way possible. It's probably better that I don't document it, so that someone burns it to the ground and starts again.