I found how to detect collision, but I am still looking for the info on the collision.
bool PhysicsAlgo::GetSeparatingPlane(
    const Vector3& relativePos, const Vector3& Plane, 
    const std::vector<Vector3>& aAxis, const Vector3& aSize,
    const std::vector<Vector3>& bAxis, const Vector3& bSize)
{
    float aProj = fabs(Vector3DotProduct((aAxis[0] * aSize.x), Plane)) +
                fabs(Vector3DotProduct((aAxis[1] * aSize.y), Plane)) +
                fabs(Vector3DotProduct((aAxis[2] * aSize.z), Plane));
    float bProj = fabs(Vector3DotProduct((bAxis[0] * bSize.x), Plane)) + 
                fabs(Vector3DotProduct((bAxis[1] * bSize.y), Plane)) +
                fabs(Vector3DotProduct((bAxis[2] * bSize.z), Plane));
    
    float rProj = fabs(Vector3DotProduct(relativePos, Plane));
    if (rProj > aProj + bProj)
        return true;
    return false;
}
CollisionPoints PhysicsAlgo::FindBoxBoxCollisionPoints(
    const BoxCollider *a, const Transform *aTransform,
    const BoxCollider *b, const Transform *bTransform)
{
    Vector3 A = aTransform->GetPositionWorld() + a->GetOffset();
    Vector3 B = bTransform->GetPositionWorld() + b->GetOffset();
    std::vector<Vector3> aAxis = aTransform->GetLocalAxis();
    std::vector<Vector3> bAxis = bTransform->GetLocalAxis();
    Vector3 aSize = a->GetSize();
    Vector3 bSize = b->GetSize();
    Vector3 rPos = B - A;
    // si 1 separatingPlane true pas de collision
    bool colliding = !(
        GetSeparatingPlane(rPos, aAxis[0], aAxis, aSize, bAxis, bSize) ||
        GetSeparatingPlane(rPos, aAxis[1], aAxis, aSize, bAxis, bSize) ||
        GetSeparatingPlane(rPos, aAxis[2], aAxis, aSize, bAxis, bSize) ||
        GetSeparatingPlane(rPos, bAxis[0], aAxis, aSize, bAxis, bSize) ||
        GetSeparatingPlane(rPos, bAxis[1], aAxis, aSize, bAxis, bSize) ||
        GetSeparatingPlane(rPos, bAxis[2], aAxis, aSize, bAxis, bSize) ||
        GetSeparatingPlane(rPos, Vector3CrossProduct(aAxis[0], bAxis[0]), aAxis, aSize, bAxis, bSize) ||
        GetSeparatingPlane(rPos, Vector3CrossProduct(aAxis[0], bAxis[1]), aAxis, aSize, bAxis, bSize) ||
        GetSeparatingPlane(rPos, Vector3CrossProduct(aAxis[0], bAxis[2]), aAxis, aSize, bAxis, bSize) ||
        GetSeparatingPlane(rPos, Vector3CrossProduct(aAxis[1], bAxis[0]), aAxis, aSize, bAxis, bSize) ||
        GetSeparatingPlane(rPos, Vector3CrossProduct(aAxis[1], bAxis[1]), aAxis, aSize, bAxis, bSize) ||
        GetSeparatingPlane(rPos, Vector3CrossProduct(aAxis[1], bAxis[2]), aAxis, aSize, bAxis, bSize) ||
        GetSeparatingPlane(rPos, Vector3CrossProduct(aAxis[2], bAxis[0]), aAxis, aSize, bAxis, bSize) ||
        GetSeparatingPlane(rPos, Vector3CrossProduct(aAxis[2], bAxis[1]), aAxis, aSize, bAxis, bSize) ||
        GetSeparatingPlane(rPos, Vector3CrossProduct(aAxis[2], bAxis[2]), aAxis, aSize, bAxis, bSize)
    );
    return {
        Vector3Zero(),
        Vector3Zero(),
        Vector3Zero(),
        0,
        colliding
    };
}